菜单
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

JS 教程

JS HOME JS 简介 JS 位置 JS 输出 JS 语句 JS 语法 JS 注释 JS 变量 JS Let JS Const JS 运算符 JS 算术 JS 赋值 JS 数据类型 JS 函数 JS 对象 JS 对象属性 JS 对象方法 JS 对象显示 JS 对象构造函数 JS 事件 JS 字符串 JS 字符串方法 JS 字符串搜索 JS 字符串模板 JS 数字 JS BigInt JS 数字方法 JS 数字属性 JS 数组 JS 数组方法 JS 数组搜索 JS 数组排序 JS 数组迭代 JS 数组 Const JS 日期 JS 日期格式 JS 日期获取方法 JS 日期设置方法 JS Math JS 随机 JS 布尔值 JS 比较 JS If Else JS Switch JS For 循环 JS For In 循环 JS For Of 循环 JS While 循环 JS Break JS 可迭代对象 JS Sets JS Set 方法 JS Maps JS Map 方法 JS Typeof JS 类型转换 JS 解构 JS 位运算 JS RegExp JS 优先级 JS 错误 JS 作用域 JS 声明提前 JS Strict Mode JS this 关键字 JS 箭头函数 JS 类 JS 模块 JS JSON JS 调试 JS 风格指南 JS 最佳实践 JS 错误 JS 性能 JS 保留字

JS 版本

JS 版本 JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS 2019 JS 2020 JS 2021 JS 2022 JS 2023 JS 2024 JS IE / Edge JS 历史

JS 对象

对象定义 对象原型 对象方法 对象属性 对象 Get / Set 对象保护

JS 函数

函数定义 函数参数 函数调用 函数 Call 函数 Apply 函数 Bind 函数闭包

JS 类

类入门 类继承 类静态

JS 异步

JS 回调 JS 异步 JS Promises JS Async/Await

JS HTML DOM

DOM 入门 DOM 方法 DOM Document DOM 元素 DOM HTML DOM 表单 DOM CSS DOM 动画 DOM 事件 DOM 事件监听器 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS Browser BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS Web APIs

Web API 入门 Web 表单 API Web History API Web Storage API Web Worker API Web Fetch API Web Geolocation API

JS AJAX

AJAX 入门 AJAX XMLHttp AJAX Request AJAX Response AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用 AJAX 示例

JS JSON

JSON 入门 JSON 语法 JSON vs XML JSON 数据类型 JSON 解析 JSON Stringify JSON 对象 JSON 数组 JSON 服务器 JSON PHP JSON HTML JSON JSONP

JS vs jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS Graphics

JS Graphics JS Canvas JS Plotly JS Chart.js JS Google Chart JS D3.js

JS 示例

JS 示例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS 浏览器 JS 编辑器 JS 练习 JS 测验 JS 网站 JS 面试准备 JS Bootcamp JS 证书

JS 参考

JavaScript 对象 HTML DOM 对象


JavaScript 常见错误


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


意外使用赋值运算符

如果程序员在 if 语句中意外地使用了赋值运算符(=),而不是比较运算符(==),JavaScript 程序可能会产生意想不到的结果。

此 if 语句返回 false(符合预期),因为 x 不等于 10

let x = 0;
if (x == 10)
自己动手试一试 »

此 if 语句返回 true(可能不是预期的),因为 10 为 true

let x = 0;
if (x = 10)
自己动手试一试 »

此 if 语句返回 false(可能不是预期的),因为 0 为 false

let x = 0;
if (x = 0)
自己动手试一试 »

赋值运算总是返回赋值的值。


期望松散比较

在常规比较中,数据类型无关紧要。此 if 语句返回 true

let x = 10;
let y = "10";
if (x == y)
自己动手试一试 »

在严格比较中,数据类型很重要。此 if 语句返回 false

let x = 10;
let y = "10";
if (x === y)
自己动手试一试 »

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

case switch 将显示一个警报

let x = 10;
switch(x) {
  case 10: alert("Hello");
}
自己动手试一试 »

case switch 将不会显示警报

let x = 10;
switch(x) {
  case "10": alert("Hello");
}
自己动手试一试 »


混淆加法与连接

加法是关于数字的相加。

连接是关于字符串的相加。

在 JavaScript 中,这两种操作都使用相同的 + 运算符。

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

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

let y = 10;
y += "5";        // 现在 y 是 "105"
自己动手试一试 »

当相加两个变量时,很难预测结果。

let x = 10;
let y = 5;
let z = x + y;     // 现在 z 是 15

let x = 10;
let y = "5";
let z = x + y;     // 现在 z 是 "105"
自己动手试一试 »

误解浮点数

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

所有编程语言,包括 JavaScript,在处理精确的浮点值时都有困难。

let x = 0.1;
let y = 0.2;
let z = x + y            // z 中的结果不是 0.3
自己动手试一试 »

为了解决上述问题,乘除法会有帮助。

示例

let z = (x * 10 + y * 10) / 10;       // z 将是 0.3
自己动手试一试 »

拆分 JavaScript 字符串

JavaScript 允许您将语句拆分成两行。

示例 1

let x =
"Hello World!";
自己动手试一试 »

但是,在字符串中间拆分语句将不起作用。

示例 2

let x = "Hello
World!";
自己动手试一试 »

如果您必须在字符串中拆分语句,则必须使用“反斜杠”。

示例 3

let x = "Hello \
World!";
自己动手试一试 »

错放分号

由于错放了分号,此代码块将执行,无论 x 的值是什么。

if (x == 19);
{
  // 代码块 
}
自己动手试一试 »

拆分 return 语句

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

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

示例 1

function myFunction(a) {
  let power = 10 
  return a * power
}
自己动手试一试 »

示例 2

function myFunction(a) {
  let power = 10;
  return a * power;
}
自己动手试一试 »

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

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

示例 3

function myFunction(a) {
  let
  power = 10; 
  return a * power;
}
自己动手试一试 »

但是,如果您像这样将 return 语句拆分成两行,会发生什么?

示例 4

function myFunction(a) {
  let
  power = 10; 
  return
  a * power;
}
自己动手试一试 »

函数将返回 undefined

为什么?因为 JavaScript 认为您的意思是

示例 5

function myFunction(a) {
  let
  power = 10; 
  return;
  a * power;
}
自己动手试一试 »

Explanation

如果一个语句不完整,就像

let

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

power = 10;

但是,由于这个语句是完整的,

return

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

return;

这是因为在 JavaScript 中,使用分号结束(终止)语句是可选的。

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

切勿拆分 return 语句。


使用命名索引访问数组

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

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

JavaScript不支持带命名索引的数组。

在 JavaScript 中,数组使用数字索引:  

示例

const person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
person.length;       // person.length 将返回 3
person[0];           // person[0] 将返回 "John"
自己动手试一试 »

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

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

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

示例

const person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
person.length;      // person.length 将返回 0
person[0];          // person[0] 将返回 undefined
自己动手试一试 »

在定义末尾添加逗号

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

对象示例

person = {firstName:"John", lastName:"Doe", age:46,}

数组示例

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

警告!!

Internet Explorer 8 将崩溃。

JSON 不允许尾随逗号。

JSON

person = {"firstName":"John", "lastName":"Doe", "age":46}

JSON

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

Undefined 不等于 Null

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

此外,空的 JavaScript 对象可能具有 null 值。

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

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

示例

if (typeof myObj === "undefined") 
自己动手试一试 »

但是您不能测试对象是否为 null,因为如果对象是 undefined,这将引发错误。

不正确

if (myObj === null) 

要解决此问题,您必须测试对象是否不为 null 且不为 undefined

但这仍然可能引发错误。

不正确

if (myObj !== null && typeof myObj !== "undefined") 

因此,您必须先测试 undefined,然后才能测试 null

正确

if (typeof myObj !== "undefined" && myObj !== null) 
自己动手试一试 »


×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持