最适合网络开发者的网站

JS 教程

JS 首页 JS 简介 JS 去哪儿 JS 输出 JS 语句 JS 语法 JS 评论 JS 变量 JS 让 JS 常量 JS 运算符 JS 算术 JS 作业 JS 数据类型 JS 函数 JS 对象 JS 活动 JS 字符串 JS 字符串方法 JS 字符串搜索 JS 字符串模板 JS 数字 JS 数字方法 JS 数组 JS 数组方法 JS 数组排序 JS 数组迭代 JS 数组常量 JS 日期 JS 日期格式 JS 获取日期方法 JS 日期设置方法 JS 数学 JS 随机 JS 布尔值 JS 比较 JS 如果否则 JS 开关 JS 循环 JS 循环 JS 循环 JS 循环 JS 中断 JS 可迭代对象 JS 集 JS 地图 JS Typeof JS 类型转换 JS 按位 JS 正则表达式 JS 错误 JS 作用域 JS 提升 JS 严格模式 JS this 关键字 JS 箭头函数 JS 类 JS 模块 JS JSON JS 调试 JS 风格指南 JS 最佳实践 JS 错误 JS 性能 JS 保留字

JS 版本

JS 版本 JS 2009(ES5) JS 2015(ES6) 小学 2016 小学 2017 小学 2018 JS IE/Edge JS 历史

JS 对象

对象定义 对象属性 对象方法 对象显示 对象访问器 对象构造函数 对象原型 对象可迭代对象 对象集 对象映射 对象引用

JS 函数

函数定义 函数参数 函数调用 函数调用 功能应用 函数绑定 函数闭包

JS 类

课程简介 类继承 静态类

JS 异步

JS 回调 JS 异步 JS 承诺 JS 异步/等待

JS HTML DOM

DOM 简介 DOM 方法 DOM 文档 DOM 元素 DOM HTML DOM 表单 DOM CSS DOM 动画 DOM 事件 DOM 事件监听器 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS 浏览器 BOM

JS 窗口 JS 屏幕 JS 位置 JS 历史 JS 导航器 JS 弹出警告 JS 时机 JS Cookies

JS Web API

Web API 简介 Web 表单 API 网络历史记录 API Web 存储 API Web Worker API Web 获取 API 网络地理定位 API

JS AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用程序 AJAX 示例

JS JSON

JSON 简介 JSON 语法 JSON 与 XML JSON 数据类型 JSON 解析 JSON 字符串化 JSON 对象 JSON 数组 JSON 服务器 JSON 格式的 PHP JSON 的 HTML JSON JSONP

JS 与 jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS 图形

JS 图形 JS 画布 JS Plotly JS Chart.js JS 谷歌图表 JS D3.js

JS 示例

JS 示例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS 浏览器 JS 编辑器 JS 练习 JS 测验 JS 证书

JS 参考

JavaScript 对象 HTML DOM 对象

JavaScript。W3Schools 英文版。初学者课程

尿素

JavaScript 常见错误


本章指出了一些常见的 JavaScript 错误。


意外使用赋值运算符

如果程序员意外地使用了赋值运算符(=)而不是比较运算符(==) 在 if 语句中。

if 语句返回false (如预期)因为 x 不等于 10:

让 x = 0;
如果 (x == 10)
亲自尝试 »

if 语句返回true (可能不像预期的那样),因为 10 是正确的:

让 x = 0;
如果(x = 10)
亲自尝试 »

if 语句返回false (可能不像预期的那样),因为 0 为假:

让 x = 0;
如果(x = 0)
亲自尝试 »

赋值总是返回赋值的值。


期望宽松的比较

在常规比较中,数据类型并不重要。这 if 语句返回 true:

设 x = 10;
让 y = "10";
如果 (x == y)
亲自尝试 »

严格来说,数据类型很重要。这 if 语句返回 false:

设 x = 10;
让 y = "10";
如果 (x === y)
亲自尝试 »

一个常见的错误是忘记 switch 语句使用严格比较:

case switch 将显示一条警报:

设 x = 10;
开关(x){
情况10:alert(“你好”);
}
亲自尝试 »

case switch 不会显示警告:

设 x = 10;
开关(x){
案例“10”:警报(“你好”);
}
亲自尝试 »

令人困惑的加法和连接

添加 是关于添加数字.

级联 是关于添加字符串.

在 JavaScript 中,两种操作都使用相同的 + 操作员。

因此,将数字作为数字添加与将数字作为字符串添加会产生不同的结果:

设 x = 10;
x = 10 + 5; // 现在 x 是 15

令 y = 10;
y += "5"; // 现在 y 是 "105"
亲自尝试 »

当添加两个变量时,可能很难预测结果:

设 x = 10;
令 y = 5;
让 z = x + y; // 现在 z 是 15

设 x = 10;
让 y = "5";
让 z = x + y; // 现在 z 是“105”
亲自尝试 »

误解浮标

JavaScript 中的所有数字都以 64 位存储 浮点数字 (浮动)。

所有编程语言(包括 JavaScript)在处理精确浮点值时都存在困难:

设 x = 0.1;
令 y = 0.2;
让 z = x + y // z 中的结果不会是 0.3
亲自尝试 »

为了解决上述问题,乘法和除法很有用:

例子

让 z = (x * 10 + y * 10) / 10; // z 将为 0.3
亲自尝试 »

破坏 JavaScript 字符串

JavaScript 允许你将一个语句分成两行:

示例 1

令 x =
“你好世界!”;
亲自尝试 »

但是,在字符串中间中断语句是行不通的:

示例 2

让 x = “你好
世界!”;
亲自尝试 »

如果必须中断字符串中的语句,则必须使用“反斜杠”:

示例 3

让 x = “你好\
世界!”;
亲自尝试 »

放错分号

由于分号位置错误,无论 x 的值是什么,此代码块都会执行:

如果 (x==19);
{
// 代码块
}
亲自尝试 »

打破退货声明

在行末自动关闭语句是 JavaScript 的默认行为。

因此,这两个示例将返回相同的结果:

示例 1

函数 myFunction(a){
设功率 = 10
返回 a * 幂
}
亲自尝试 »

示例 2

函数 myFunction(a){
设功率=10;
返回 * 幂;
}
亲自尝试 »

JavaScript 还允许您将一个语句分成两行。

因此,示例 3 也将返回相同的结果:

示例 3

函数 myFunction(a){

功率=10;
返回 * 幂;
}
亲自尝试 »

但是,如果将返回语句分成两行,如下所示,会发生什么情况:

示例 4

函数 myFunction(a){

功率=10;
返回
a* 功率;
}
亲自尝试 »

该函数将返回 undefined!

为什么?因为 JavaScript 认为你的意思是:

示例 5

函数 myFunction(a){

功率=10;
返回;
a* 功率;
}
亲自尝试 »

解释

如果语句不完整,例如:

JavaScript 将尝试通过读取下一行来完成该语句:

功率=10;

但由于此语句已完成:

返回

JavaScript 将自动关闭它,如下所示:

返回;

发生这种情况的原因是,在 JavaScript 中用分号关闭(结束)语句是可选的。

JavaScript 会在行末关闭 return 语句,因为它是一个完整的语句。

切勿破坏返回语句。


使用命名索引访问数组

许多编程语言支持具有命名索引的数组。

具有命名索引的数组称为关联数组(或哈希)。

JavaScript 确实 不是 支持具有命名索引的数组。

在 JavaScript 中, 数组 使用编号索引:

例子

const 人 = [];
person[0] = "约翰";
人[1] = "Doe";
人[2] = 46;
person.length; // person.length 将返回 3
person[0]; // person[0] 将返回“John”
亲自尝试 »

在 JavaScript 中, 对象 使用命名索引.

如果使用命名索引,则在访问数组时,JavaScript 会将数组重新定义为标准对象。

自动重定义后,数组方法和属性将产生未定义或不正确的结果:

例子:

const 人 = [];
人["firstName"] = "约翰";
人["lastName"] = "Doe";
人["年龄"] = 46;
person.length; // person.length 将返回 0
person[0]; // person[0] 将返回未定义
亲自尝试 »

用逗号结束定义

在 ECMAScript 5 中,对象和数组定义中的尾随逗号是合法的。

对象示例:

人 = {名字:“John”,姓氏:“Doe”,年龄:46,}

数组示例:

点 = [40, 100, 1, 5, 25, 10,];

警告 !!

Internet Explorer 8 将会崩溃。

JSON 不允许使用尾随逗号。

JSON:

人 = {“firstName”:“John”,“lastName”:“Doe”,“年龄”:46}

JSON:

点=[40,100,1,5,25,10];

Undefined 不为空

JavaScript 对象、变量、属性和方法可以是 undefined.

此外,空的 JavaScript 对象可以具有值 null.

这使得测试对象是否为空变得有点困难。

您可以通过测试类型是否为来测试对象是否存在 undefined:

例子:

如果(typeof myObj ===“未定义”)
亲自尝试 »

但是你无法测试一个对象是否 null,因为如果对象是 undefined:

错误:

如果 (myObj === null)

为了解决这个问题,你必须测试一个对象是否 null, 并不是 undefined.

但这仍然会引发错误:

错误:

如果 (myObj !== null && typeof myObj !== “未定义”)

因此,你必须测试是否 undefined 在你测试之前null:

正确的:

如果 (typeof myObj !== “undefined” && myObj !== null)
亲自尝试 »