JS26-50

JavaScript基础教程:循环、函数与数据结构,

dowhile

在这里插入图片描述

dowhile案例笔记

prompt:返回一个值

do{
var res=prompt("请输入你的名字")
console.1og(res)
}
while(!res)

输入东西才为false

for循环

在这里插入图片描述

循环控制语句

在这里插入图片描述
在这里插入图片描述

函数

在这里插入图片描述
(2)赋值式
function(){
var test3
console.log(“我是test3套餐”)

调用函数
如上图
fn()

调用上时区别
·虽然两种定义方式的调用都是一样的,但是还是有一些区别的
·声明式函数:调用可以在定义之前或者定义之后

函数的参数

在这里插入图片描述

函数的返回值

在这里插入图片描述

预解析

在这里插入图片描述
预解析只可以一个script

重名问题

如果重名会报错
注意和预解析一起会有不同的效果
作用域问题:
在这里插入图片描述
此时预解析提不出函数外

作用域

·什么是作用域,就是一个变量可以生效的范围
·变量不是在所有地方都可以使用的,而这个变量的使用范围就是作用域
全局作用域
全局作用域
·全局作用域是最大的作用域
·在全局作用域中定义的变量可以在任何地方使用
·页面打开的时候,浏览器会自动给我们生成一个全局作用域window
·这个作用域会一直存在,直到页面关闭就销毁了

//下面两个变量都是存在在全局作用域下面的,都是可以在任意地方使用的
var num = 100
var num2 = 200

在这里插入图片描述

访问规则

在这里插入图片描述
总结:就近原则

赋值规则

在这里插入图片描述
赋值方面如果都找不到会变成全局很特殊!!

复杂数据类型-对象

在这里插入图片描述
内置构造函数:

var obj2 = new Object()
obj2.name = "xiaoming"
obj2.age = 18
console.log(obj2)

注意:
如果取不符合变量规则的名字如a+b要加双引号

对象的基本操作

/增

var obj{}

obj.name="kerwin"
Obj.age=100
obj.1ocation="dalian"

documet.write(“姓名是”+obj.name)

obj.age=200
或者obj["name"]=200   此方法更好更全能

delete obj.name

中括号的更全能可以适合不符合变量命名规则的变量

对象的遍历

for (var i in obj){               //获取key
		console.log(obj[i])


}  

不同数据类型的存储

在这里插入图片描述
会污染前面的对象

典型例子:
在这里插入图片描述
在这里插入图片描述
之所以 obj=obj2输出后结果是true 而 定义两个不同对象相同内容结果是false是因为堆不同
在这里插入图片描述
建立一个空对象并往其中填充内容可以随便更改且堆地址不同

数组数据类型

在这里插入图片描述

数组的基本操作

length:可读可写


var arr1[1,2,3,4,8] 
console.log(arr1.length)
arr1.length = 3
//清空数组
arr1.length

索引:

console.log(arr2[0])

遍历

//遍历
var arr3 = [3,4,5,6,7,8]
for(var i=0; ikarr3.length; i++){
console.log(arr3[i])
}

一种赋值

for(var i=0; ikarr3.length; i++){
arr3[i]=arr4[i]
}

冒泡排序法

在这里插入图片描述

for(var m=0 ;m<arr.length-1 m--)
{
for (var i = 0; i < arr.length-1-m; i++) {
if(arr[i] >arr[i+1])[
var temp = arr[i]
arr[i]= arr[i+1]
arr[i+1]=temp
}
}
}

选择排序法

在这里插入图片描述

for (var m = 0;m< arr.length -1;m++){
var minIndex = m
for (var i=m;i<arr.length;i++){
if (arr[i]< arr[minIndex]){
minIndex = i

var temp = arr[1]
arr[1] = arr[minIndex]
arr[minIndex] = temp

数组常用方法

在这里插入图片描述

push

push往后面追加元素
返回值为长度

pop

从后面删除元素
返回值为删除的元素

unshift

从前面追加元素
返回值长度

shift

从前面删除元素
返回值为删除的元素

splice

删除

resplice= arr.splice(1,2)

第一个数值为下表
第二个数值为删除多少个数值
增加


var ressplice = arr2.splice(1,0,"gangdane") //直接加载第二个位置

reserve倒序

var arr3=[2,1,3,4]
arr3.reverse()
console.log(arr3)

sort 排序

正常使用会把数字个位十位分开依次往下一个数排序
如果实现整个数的排序需要使用回调函数的方法

var arr3=[2,1,3,4]
arr3.sort(function(a,b){return a-b})
[root@yfw ~]# cd /www/wwwroot/szrengjing.com/js [root@yfw js]# ls -la total 644 drwxr-xr-x 7 www www 4096 Oct 9 2023 . drwxr-xr-x 30 www www 4096 Nov 11 20:38 .. -rwxr-xr-x 1 www www 5730 Sep 20 2017 auto_complete.js drwxr-xr-x 2 www www 4096 Oct 9 2023 calendar -rwxr-xr-x 1 www www 1228 Sep 20 2017 calendar.php -rwxr-xr-x 1 www www 8152 Sep 20 2017 category_selecter.js drwxr-xr-x 3 www www 4096 Nov 11 10:02 chat -rwxr-xr-x 1 www www 39101 Mar 29 2025 common.js -rwxr-xr-x 1 www www 18478 Sep 20 2017 common.min.js -rwxr-xr-x 1 www www 5782 Sep 20 2017 compare.js drwxr-xr-x 2 www www 4096 Oct 9 2023 countdown -rwxr-xr-x 1 www www 3388 Sep 20 2017 global.js -rwxr-xr-x 1 www www 985 Sep 20 2017 helpmenu.js -rwxr-xr-x 1 www www 2463 Sep 20 2017 index.js -rwxr-xr-x 1 www www 65877 Sep 20 2017 jquery-1.6.2.min.js -rwxr-xr-x 1 www www 28773 Sep 20 2017 jquery.countdown-2.5.3.js -rwxr-xr-x 1 www www 7018 Sep 20 2017 jquery.countdown-2.5.3.min.js -rwxr-xr-x 1 www www 8165 Sep 20 2017 jquery.easing.1.3.js -rwxr-xr-x 1 www www 50666 Sep 20 2017 jquery.js -rwxr-xr-x 1 www www 4823 Sep 20 2017 jquery.json.js -rwxr-xr-x 1 www www 57290 Sep 20 2017 jquery.min.js -rwxr-xr-x 1 www www 60591 Sep 20 2017 jquery.ztree.all-3.5.min.js -rwxr-xr-x 1 www www 17521 Sep 20 2017 json2.js -rwxr-xr-x 1 www www 1339 Sep 20 2017 left_goodslist.js -rwxr-xr-x 1 www www 3344 Sep 20 2017 lefttime.js drwxr-xr-x 4 www www 4096 Oct 9 2023 My97DatePicker -rwxr-xr-x 1 www www 851 Sep 20 2017 myship.js -rwxr-xr-x 1 www www 1147 Sep 20 2017 order_pickpoint.js -rwxr-xr-x 1 www www 2489 Sep 20 2017 region.js -rwxr-xr-x 1 www www 18244 Sep 20 2017 register.js -rwxr-xr-x 1 www www 27357 Dec 30 2024 shopping_flow.js -rwxr-xr-x 1 www www 2479 Sep 20 2017 showdiv.js -rwxr-xr-x 1 www www 3013 Sep 20 2017 sms.js -rwxr-xr-x 1 www www 22730 Sep 20 2017 transport.js -rwxr-xr-x 1 www www 22671 Sep 20 2017 transport.org.js -rwxr-xr-x 1 www www 29005 Sep 20 2017 userbf.js -rwxr-xr-x 1 www www 39580 Sep 20 2017 user.js -rwxr-xr-x 1 www www 4487 Sep 20 2017 utils.js drwxr-xr-x 2 www www 4096 Oct 9 2023 validate [root@yfw js]# [root@yfw ~]# cd /www/wwwroot/szrengjing.com/js/chat [root@yfw chat]# ls -la total 352 drwxr-xr-x 3 www www 4096 Nov 11 10:02 . drwxr-xr-x 7 www www 4096 Oct 9 2023 .. ---------- 1 www www 6295 Nov 7 17:25 auto-connect.js -rwxr-xr-x 1 www www 1956 Sep 20 2017 b64.js -rwxr-xr-x 1 www www 8146 Nov 9 19:50 chat.js -rwxr-xr-x 1 www www 2745 Nov 11 10:03 customer-service.html -rwxr-xr-x 1 www www 8615 Sep 20 2017 md5.js -rwxr-xr-x 1 www www 5632 Sep 20 2017 sha1.js -rwxr-xr-x 1 www www 53803 Nov 6 01:15 strophe.js drwxrwxr-x 8 root root 4096 Nov 6 01:12 strophejs-3.0.1 -rwxr-xr-x 1 www www 165543 Nov 6 00:53 strophejs-3.0.1.tar.gz -rw-r--r-- 1 www www 53803 Nov 7 10:26 strophe.min.js -rwxr-xr-x 1 www www 1879 Nov 10 18:14 test-connection.html -rwxr-xr-x 1 www www 4491 Nov 10 18:20 test.html -rwxr-xr-x 1 www www 7533 Nov 11 11:26 webchat.js [root@yfw chat]#
11-12
你提供的服务器目录结构非常清晰,我们来 **全面分析当前环境**,并给出 **下一步最佳实践方案**。 --- ## ✅ 当前目录结构解析 ### 1. 主路径 ```bash /www/wwwroot/szrengjing.com/js/chat/ ``` 这是你的 JSXC 客户端相关脚本存放位置。 ### 2. 关键文件列表(已存在) | 文件 | 是否可用 | 说明 | |------|--------|------| | `strophe.js` / `strophe.min.js` | ✅ 可用 | XMPP 核心通信库(比 STOMP 更原生) | | `strophejs-3.0.1/` 目录 | ✅ 存在 | 完整的 Strophe.js 源码包 | | `webchat.js` | ✅ 存在 | 你自定义的聊天逻辑主文件 | | `auto-connect.js` | ⚠️ 权限异常 | 文件权限为 `----------`(无任何权限!) | > ❗ `auto-connect.js` 虽然存在,但权限是 `----------` → 浏览器无法读取! --- ## 🔴 重大问题:文件权限错误 运行以下命令查看: ```bash ls -la /www/wwwroot/szrengjing.com/js/chat/auto-connect.js ``` 输出: ``` ---------- 1 www www 6295 Nov 7 17:25 auto-connect.js ``` 👉 这表示该文件对所有人(所有者、组、其他)都 **没有任何读写执行权限**! ### 后果: - 浏览器请求 `auto-connect.js` 会返回 403 Forbidden 或空内容 - 导致 JSXC 初始化失败 - 即使 HTML 正确引入也无法运行 --- ## ✅ 解决方案:修复权限 + 统一依赖管理 ### ✅ 步骤 1:修复 `auto-connect.js` 权限 ```bash chmod 644 /www/wwwroot/szrengjing.com/js/chat/auto-connect.js chown www:www /www/wwwroot/szrengjing.com/js/chat/auto-connect.js ``` ✅ 修复后应显示: ``` -rw-r--r-- 1 www www 6295 Nov 7 17:25 auto-connect.js ``` --- ### ✅ 步骤 2:确认你是否真的需要 `@stomp/stompjs` 你现在有: - ✅ `strophe.js`(本地已有) - ❌ 外部 CDN 引入 `stomp.umd.min.js`(超时) 📌 **结论:不需要再加载 STOMP!** 因为: > **Strophe.js 是原生支持 BOSH/XMPP 的 JavaScript 库** > 而 `@stomp/stompjs` 是用于连接 **STOMP over WebSocket** 中间件的客户端 > 你在使用 Prosody + BOSH 时,**应该优先使用 Strophe.js** 所以你可以安全删除这行: ```html <script src="https://cdn.jsdelivr.net/npm/@stomp/stompjs@6.1.2/bundles/stomp.umd.min.js"></script> ``` --- ### ✅ 步骤 3:使用本地 `strophe.min.js` 替代外部依赖 你已经有: ```bash /www/wwwroot/szrengjing.com/js/chat/strophe.min.js ``` ✅ 在 HTML 中引用它即可: ```html <script src="/js/chat/strophe.min.js"></script> ``` > ✅ 不依赖 CDN,速度快,稳定性高 --- ### ✅ 步骤 4:确保 `webchat.js` 或 `auto-connect.js` 被正确引入 假设你的自动登录逻辑写在 `auto-connect.js` 中,那么你的 `<head>` 应该这样写: ```html <!-- 依赖库 --> <script src="/js/jquery.min.js"></script> <script src="/js/chat/strophe.min.js"></script> <!-- JSXC 主文件 --> <link rel="stylesheet" href="/chat/dist/styles/jsxc.min.css" /> <script src="/chat/dist/jsxc.bundle.min.js"></script> <!-- 自定义业务逻辑 --> <script src="/js/chat/auto-connect.js"></script> ``` > ⚠️ 注意顺序:必须先加载 jQuery 和 Strophe,再加载 JSXC,最后加载你的脚本 --- ### ✅ 步骤 5:检查 `auto-connect.js` 内容是否完整 用命令查看内容: ```bash cat /www/wwwroot/szrengjing.com/js/chat/auto-connect.js ``` 你应该看到类似代码: ```js $(document).ready(function () { const options = { loginForm: { enable: false }, xmpp: { url: 'https://szrengjing.com/bosh', domain: 'szrengjing.com', resource: 'web' }, root: '/', otr: { send_encrypted: false }, loadSettings: function(callback) { const jid = 'visitor_' + Math.random().toString(36).substr(2, 9) + '@szrengjing.com'; callback(jid, 'temppass'); }, onLoginStateChanged: function(state, data) { if (state === 'connected') { console.log('✅ 已连接:', data.jid); jsxc.gui.window.open('kefu@szrengjing.com'); jsxc.gui.window.postMessage('kefu@szrengjing.com', '您好!我想咨询。'); } } }; jsxc.init(options); jsxc.start(); }); ``` 如果这个文件为空或不完整,请重新写入。 --- ## ✅ 推荐最终目录规划(清晰分工) 建议整理如下结构: ``` /www/wwwroot/szrengjing.com/ ├── chat/ ← JSXC 前端页面 │ ├── index.html ← 入口页(自动连接) │ └── dist/ ← JSXC 编译产出 │ ├── jsxc.bundle.min.js │ └── styles/jsxc.min.css │ ├── js/ │ └── chat/ │ ├── strophe.min.js ← XMPP 核心 │ └── auto-connect.js ← 自动登录逻辑 │ └── js/lib/ ← 第三方库可放这里(可选) ``` --- ## ✅ 验证是否成功 刷新网页后打开浏览器开发者工具(F12)→ Network: 你应该看到: | 请求 | 状态 | 来源 | |------|------|------| | `/js/chat/strophe.min.js` | 200 | 本地加载快 | | `/chat/dist/jsxc.bundle.min.js` | 200 | JSXC 主体 | | `/js/chat/auto-connect.js` | 200 | 自动登录脚本 | | `POST /bosh` | 200 | 开始与 XMPP 通信 | Console 输出: ``` ✅ 已连接: visitor_abcd1234@szrengjing.com ``` 🎉 成功! --- ## 🧩 补充建议 ### 🔒 安全提醒 不要让敏感文件被下载,例如: ```bash chmod 600 /etc/prosody/*.cfg.lua ``` ### 📁 统一版本控制 考虑将前端代码纳入 Git 管理,避免手动覆盖出错。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值