为什么 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() 相同。例如:
> +”10”
output: 10
但是,问题出现了,为什么 javascript 将第一个 {} 解释为空代码块?
这是因为整个输入被解析为一个语句,并且语句的第一个花括号被解释为开始一个代码块。因此,可以通过强制将输入解析为如下表达式来解决此问题:
> ({} + {})
Output: ‘[object Object][object Object]’
现在,Chrome 开发工具会自动将所有以 { 开头并以 } 结尾的内容包装在一对隐式括号中(参见代码),以强制将其评估为表达式。
因此 {}+{} 在 Chrome 控制台和大多数现代浏览器中不再是 NaN。