这行JavaScript代码的含义是什么?
var x[],matrix[],n;
...
n = (matrix = x) && matrix.length;
虽然我进行了搜索,但没有找到任何提示。
谢谢
var x[],matrix[],n;
...
n = (matrix = x) && matrix.length;
虽然我进行了搜索,但没有找到任何提示。
谢谢
x
的值分配给 matrix
; matrix = x
表达式的结果是被分配的值(所有分配表达式都是如此)。 让我们称这个值为 "x-value"。从现在开始,我不想再称它为 x
,因为 x
只被计算一次。matrix.length
分配给 n
;否则,将 x-value 分配给 n
。x
是 []
,则代码将设置 matrix
指向与 x
相同的空数组,并将 n
设置为 0
(分配后的 matrix.length
)。 其他示例(我在您编辑问题之前已经编写了这些):如果 x
是 "foo"
,则将 matrix
设置为 "foo"
并将 n
设置为 3
(matrix
的 length
)。如果 x
是 ""
(一个 falsy 值),则将 matrix
设置为 ""
并且 将 n
设置为 ""
。如果 x
是 {foo:"bar"}
,则将 matrix
设置为引用相同的对象,并将 n
设置为 undefined
(因为该对象没有 length
属性)。你懂的。
上面的 #2 是因为 &&
不仅是一个简单的逻辑 AND 运算符。 a && b
的工作方式如下:
a
以获取其值;让我们称其为 a-value&&
运算符的结果是 a-valueb
并将其作为 &&
运算符的结果1 "Truthy" 值是任何不是 "falsy" 的值。 falsy 值是 0
,null
,undefined
,""
,NaN
,当然还有 false
。
var x[],matrix[],n;
...
matrix = x
if(x is not in [null, false, 0, undefined, "NaN",""])
n = matrix.length
else
n = x
(matrix = x)
是将 x
赋值给变量 matrix
的操作。这里的 x
是一个数组,因此此操作的结果为真值,因此后面的部分会执行。
例如:
var x, matrix = [], n;
n = (matrix = x) && matrix.length;
(matrix = x)
不起作用,因为它是一个假操作。 n
被分配为 undefined
(因为这是 x
的值)。
(matrix = x)
是一个假操作。n保持为undefined
,值得注意的是这是误导性的——n
并不是一直保持未定义,它被赋予了undefined
的值。这是一个小但重要的区别,因为如果x
等于""
,那么n
之后也将是""
,或者如果n
有一个值,现在它将变成undefined
。赋值改变了值,只是在你特定的例子中,它会将其更改为相同的值。" - VLAZ(matrix = x)
返回一个假值,n
将被赋值为 undefined
。我会进行更新。 - Ayan
matrix = x; n = matrix && matrix.length;
- Madhawa Priyashanthan
最终成为布尔值的概率非常低。x
必须是类似于{length: true}
这样的东西。 - T.J. Crowdervar x [],matrix [],n;
到顶部。那是无效的JavaScript。 - T.J. Crowder0
是假值,但&&
运算符返回的不是布尔值,而是运算后的值。如果你执行var a = 0 && 1
,那么a
的值就是0
。&&
运算符的工作方式是“左侧的值是否为真值 - 如果不是则返回它,如果是则返回右侧的值”。相反地,var a = 0 || 1
则是a=1
,因为 OR 运算符也是以类似的方式工作 - 它会给出值,而不是布尔值。 - VLAZ