|
|
1
136
您可以在ECMA规范中查找比较算法(ECMA-262第三版中针对您的问题的相关章节:11.9.3、9.1、8.6.2.6)。
如果将涉及的抽象算法翻译回JS,那么在计算时会发生什么
哪里
这也解释了第三个例子
第一个和第二个示例更容易理解,因为属性名称总是字符串,所以
相当于
这只是
|
|
|
2
10
这是因为
[2] 与数字比较时,转换为数字为2。试试一元
|
|
|
3
10
在等式的右侧,我们有a[2],它返回一个值为2的数字类型。在左边,我们首先创建一个新数组,其中一个对象为2。然后我们调用一个[(数组在这里)]。我不确定它的计算结果是字符串还是数字。2或“2”。让我们先看字符串大小写。我相信[“2”]会创建一个新变量并返回null。空!==2.所以让我们假设它实际上隐式地转换为一个数字。a[2]将返回2。2和2在类型(so==works)和值上匹配。我认为它隐式地将数组转换为数字,因为[value]需要字符串或数字。看起来数字的优先级更高。 顺便说一句,我想知道是谁决定了优先顺序。是因为[2]的第一项是数字,所以它会转换为数字吗?或者,当将数组传递到[array]时,它会尝试先将数组转换为数字,然后再转换为字符串。谁知道呢?
在本例中,您正在创建一个名为a的对象,其中有一个名为abc的成员。等式的右边很简单;它相当于a.abc。这返回1。左侧首先创建[“abc”]的文字数组。然后通过传入新创建的数组来搜索对象上的变量。因为这需要一个字符串,所以它将数组转换为字符串。现在计算为a[“abc”],等于1。1和1是相同的类型(这就是为什么===有效)和相等的值。
这只是一个隐式转换在这种情况下不起作用,因为存在类型不匹配。 |
|
|
4
8
对于
|
|
|
5
7
这很有趣,事实上[0]并不是既正确又错误
这是javascript处理if()运算符的有趣方式。 |
|
6
6
一个项目的数组可以视为项目本身。 这是因为duck类型。因为“2”==2==2]甚至更多。 |
|
|
7
3
要为其他答案添加一点细节。。。当比较
对于
编辑:根据Christoph的详细信息,它可能在内部使用较长的表单,但结果始终与
|
|
|
8
2
您在每种情况下都要比较两个对象。。不要使用==,如果你在考虑比较,你是在考虑==,而不是==。==通常会产生疯狂的效果。在语言中寻找好的部分:) |
|
|
9
1
编辑 问题部分: 第一个例子
根据上面Christoph的回答,第一次将[0]类型转换为原语值,我们得到了“0”(
现在,将布尔(false)类型转换为数字,然后将字符串(“0”)类型转换为数字
至于
只有 6虚假价值观 :false、null、未定义、0、NaN和空字符串“”。任何不是虚假价值的东西都是真实的价值。
第二个例子
再次键入将值强制转换为基元,
|
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 8 月前 |
|
|
bairog · 从按属性筛选的对象数组字典中创建值数组 8 月前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 8 月前 |
|
|
Geremia · 2D NumPy数组+1D数组? 9 月前 |
|
|
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 10 月前 |
|
|
Paul Williams · 迭代数组时输出有问题 10 月前 |