📜  JavaScript 最奇怪的 5 个行为(1)

📅  最后修改于: 2023-12-03 15:01:44.796000             🧑  作者: Mango

JavaScript 最奇怪的 5 个行为

JavaScript 是一种非常流行的编程语言,但它也有一些令人惊讶的行为。在本文中,我们将介绍 JavaScript 中最奇怪的 5 个行为,并说明它们的原因。

1. NaN 的奇怪行为

NaN 表示 "Not a Number",在数学运算错误时常常会出现。然而,JavaScript 中 NaN 的行为却有些奇怪。下面是一些例子:

console.log(NaN === NaN); // false
console.log(NaN == NaN); // false
console.log(typeof NaN); // number

上述代码片段展示了 NaN 的三个奇怪之处:

  • NaN 与任何值(包括自身)都不相等,不论使用 == 还是 === 比较。
  • NaN 被认为是 number 类型,这与其名字 "Not a Number" 相悖。
2. 变量声明提升

在 JavaScript 中,变量声明会被提升到当前作用域的顶部。这意味着,你可以在变量声明之前使用变量,它不会引发错误。例如:

console.log(myVar); // 输出 undefined
var myVar = 5;
console.log(myVar); // 输出 5

上述代码中,变量 myVar 在声明之前被使用,尽管它的值是 undefined

3. == 和 === 的差异

JavaScript 中有两种比较运算符:=====。奇怪的是,它们的行为不同。

== 运算符会进行类型转换,然后比较值是否相等。例如:

console.log(5 == "5"); // 输出 true

=== 运算符会先比较值是否相等,再比较类型是否相等。例如:

console.log(5 === "5"); // 输出 false

由于类型转换可能会导致意想不到的结果,推荐使用 === 运算符进行严格比较。

4. 引用类型的复制

在 JavaScript 中,变量存储的是对象的引用,而不是对象本身。当将一个引用类型赋值给另一个变量时,它们实际上指向同一个对象。例如:

var obj1 = { name: "Alice" };
var obj2 = obj1;
obj2.name = "Bob";
console.log(obj1.name); // 输出 "Bob"

上述代码中,改变 obj2.name 的值也会影响 obj1,因为它们引用同一个对象。

5. NaN 是一个奇怪的数值

虽然 NaN 代表 "Not a Number",但它在某种程度上被视为一个数值类型。例如:

console.log(typeof NaN); // 输出 "number"
console.log(NaN + 5); // 输出 NaN
console.log(NaN + "Hello"); // 输出 "NaNHello"

上述代码中展示了 NaN 的奇怪之处:它被视为数值类型,但与任何数字相加仍然得到 NaN。


这就是 JavaScript 中最奇怪的 5 个行为。了解这些行为可以帮助程序员避免一些难以理解的错误及问题。希望本文对你有所帮助!