📜  为什么 Chrome 控制台中的 {} + {} 不再是 NaN 了?

📅  最后修改于: 2022-05-13 01:56:26.051000             🧑  作者: Mango

为什么 Chrome 控制台中的 {} + {} 不再是 NaN 了?

什么是 Web 控制台?

现代 Web 浏览器具有内置的开发工具,可与 JavaScript 和其他 Web 技术一起使用。这些工具包括类似于 shell 界面的控制台,以及用于检查文档对象模型 (DOM)、调试和分析网络活动的工具。

作为 JavaScript 开发过程的一部分,开发人员通常使用控制台来记录信息,它还允许您与网页交互。有关 Web 控制台以及如何运行它的更多详细信息,您可以访问此处。

加法是如何在 JavaScript 中执行的?

在 JavaScript 中,只能对 numbers 和字符串执行加法,所有其他值都转换为这两种类型中的任何一种。 JavaScript中有两种值-

  • Primitive – undefined, null, boolean, numbers, 字符串
  • 对象——数组和函数

让我们了解加法的一般规则:

所以,考虑给定的表达式

var result = value 1 + value 2
  • 如果值 1 或值 2 是字符串,则结果将是字符串,输出将是值 1 和值 2 的串联;
  • 否则,它将结果转换为数字,输出将是值 1 和值 2 的总和。

例子:

> var value1 = “hello”  
> var value2 = 123 
> var result = value1 + value2 
> console.log(result)
Output : hello123
 
> typeof(result) 
Output : “String”
 
> var result = value1 + value1
> console.log(result)
Output : 246

> typeof(result) 
Output : “number”

更多预期结果:添加两个空数组:

> var result = []+[]
> console.log(result)
Output :
> typeof(result) 
Output : "string"
Hence the result of []+[] is the concatenation of two empty strings.

JavaScript Object 字面量:这是一种使用 { } 括号创建对象的简单方法。对象可以在 { } 中包含逗号分隔的键值对,其中键是属性或方法名称,值是任何数据类型或函数的属性值。

句法:

var  = { key1: value1, key2: value2,... keyN: valueN};

添加字符串和对象:

> var result = []+{}
> console.log(result) 
Output : [object Object]
> String({})
Output:'[object Object]'

说明:因此,在上面的示例中,一个空对象被转换为字符串,产生以下结果。因此,结果是通过连接“”和“[object Object]”来创建的。

一些更有趣的结果:看看以下内容:

说明:在这里,JavaScript 将第一个 {} 解释为空代码块并忽略它。通过评估 + {} 计算结果 NaN。这里的加号 (+) 不是二元加法运算符,它是一元前缀运算符,将其操作数转换为数字,方式与 Number() 相同。例如:

但是,问题出现了,为什么 javascript 将第一个 {} 解释为空代码块?

这是因为整个输入被解析为一个语句,并且语句的第一个花括号被解释为开始一个代码块。因此,可以通过强制将输入解析为如下表达式来解决此问题:

现在,Chrome 开发工具会自动将所有以 { 开头并以 } 结尾的内容包装在一对隐式括号中(参见代码),以强制将其评估为表达式。

因此 {}+{} 在 Chrome 控制台和大多数现代浏览器中不再是 NaN。