Javascript Can';我无法解释这些结果
有人能给我解释一下为什么会有这些结果吗 我知道这不是一个真正的问题,但我很想知道Javascript Can';我无法解释这些结果,javascript,Javascript,有人能给我解释一下为什么会有这些结果吗 我知道这不是一个真正的问题,但我很想知道 谢谢这是因为+是用来添加数字和字符串的,它也是。这也是因为{}既是一个空对象又是一个空对象 我可以解释这一点 [] + {} 两者都转换为字符串 [].toString() + {}.toString() [].toString()与[].join(“”),和{}.toString()是'[object object]',所以第一个是[object object] 第二个更令人困惑 {} + [] 此处的{
谢谢这是因为+是用来添加数字和字符串的,它也是。这也是因为
{}
既是一个空对象又是一个空对象
我可以解释这一点
[] + {}
两者都转换为字符串
[].toString() + {}.toString()
[].toString()
与[].join(“”)
,和{}.toString()
是'[object object]'
,所以第一个是[object object]
第二个更令人困惑
{} + []
此处的{}
不会被解释为对象,而是被解释为空块。所以里面的代码是运行的。里面什么都没有,所以它什么也不做,然后运行下一条语句:+[]
。这将数组转换为int,int首先将数组转换为字符串,而不是字符串
{} + [] => +[] => +([].toString()) => 0
如果将{}
放在括号中,它将与第一个相同
({}) + [] => '[object Object]'
来自,与
[]+[]
使用加法运算符时,左操作数和右操作数都将首先转换为基本体()。根据
将对象(在本例中为数组)转换为基元将返回
它的默认值,用于具有有效toString()方法的对象
是调用对象.toString()的结果。对于
数组这与调用array.join()
([§15.4.4.2][4])相同。
连接一个空数组会导致一个空字符串,所以
加法运算符返回两个空字符串的串联,
这是空字符串
[]+{}
与[]+[]
类似,两个操作数都首先转换为原语。对于“对象对象”(§15.2),这也是
调用object.toString()
,该函数用于非null、非未定义的对象
是“[对象]”
([§15.2.4.2][5]){}+[]
这里的{}
不是作为一个对象来解析的,而是作为一个空块([§12.1][6]),至少只要您没有强制这样做
语句是一个表达式,但稍后将详细介绍)。回归
空块的值为空,因此该语句的结果为
与+[]
相同。一元+
运算符([§11.4.6][7])返回
ToNumber(ToPrimitive(操作数))
。我们已经知道,,
ToPrimitive([])
是空字符串,根据[§9.3.1][8],
ToNumber(“”)
为0{}+{}
与前一种情况类似,第一个{}
被解析为返回值为空的块。同样,+{}
与
ToNumber(ToPrimitive({}))
,而ToPrimitive({})
是“[object]
对象]”
(请参见[]+{}
)。所以要得到+{}
的结果,我们必须
在字符串“[对象]”
上应用ToNumber
。当遵循
根据[§9.3.1][9]中的步骤,我们得到NaN
,结果如下:
如果语法无法将字符串解释为StringNumericLiteral的扩展,则[ToNumber][10]的结果为NaN
数组(16)。加入(“wat”-1)
根据[§15.4.1.1][11]和[§15.4.2.2][12],数组(16)
创建长度为16的新数组。要获取要联接的参数的值,
[§11.6.2][13]第5步和第6步表明,我们必须将两者都转换
使用ToNumber
将操作数转换为数字ToNumber(1)
仅为1
([§9.3][14]),而根据
[§9.3.1][15]. 遵循[§11.6.2][16]、§11.6.3][17]的第7步
规定
如果任一操作数为NaN,则结果为NaN
因此Array(16.join)的参数是NaN
。根据§15.4.4.5(Array.prototype.join
),我们必须调用参数上的ToString
,
这是“NaN”
([§9.8.1][18]):
如果m是NaN,则返回字符串“NaN”
在[§15.4.4.5][19]的步骤10之后,我们得到了15次重复的“NaN”
和空字符串的串联,这等于结果
你看到了。当使用“wat”+1
而不是“wat”-1
作为
参数,加法运算符将1
转换为字符串,而不是
将“wat”
转换成一个数字,这样它就可以有效地调用
数组(16)。加入(“wat1”)
你具体想知道什么?有一个数组一个对象一个对象转换成字符串,一个对象和一个数组后跟0…?@Precastic-大概是为什么它不是可交换的,以及用于
+
@scrasedcola的逻辑我不知道你是如何在谷歌上搜索[]+{}
:)@scrasedcola它仍然没有解释第一个示例的行为。虽然它几乎没有回答第二个例子,但整个问题是处理typeof
,以及这对操作的影响。那可不是复制品