Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在if语句中获取/设置变量_Javascript - Fatal编程技术网

Javascript 在if语句中获取/设置变量

Javascript 在if语句中获取/设置变量,javascript,Javascript,我有一个小示例要定义并分配给arrarray var arr; if (arr = [1]) { // arr is an array here, it contains 1 element console.log(arr.length); // 1 } 然后,我想得到数组的长度 var arr; // arr is an array here, but why cannot I assign to length property? if (arr = [1] &&

我有一个小示例要定义并分配给
arr
array

var arr;

if (arr = [1]) { // arr is an array here, it contains 1 element
    console.log(arr.length); // 1
}
然后,我想得到数组的
长度

var arr;

// arr is an array here, but why cannot I assign to length property?
if (arr = [1] && arr.length) { 
    console.log(arr.length);
}
未捕获的TypeError:无法读取未定义的属性“length”

在这方面:

if (arr = [1] && arr.length)
您将数组指定给arr,同时尝试检查长度。由于JS还不知道
arr
此时包含一个数组,因此在尝试访问length属性时会抛出一个异常

为了进行比较,这不会引发异常:

if (arr = [1]) {
    if (arr.length) {
        console.log(arr.length);
    }
}
因为在达到第二个条件检查时,JS已经知道
arr
是一个数组。

在这一行中:

if (arr = [1] && arr.length)
您将数组指定给arr,同时尝试检查长度。由于JS还不知道
arr
此时包含一个数组,因此在尝试访问length属性时会抛出一个异常

为了进行比较,这不会引发异常:

if (arr = [1]) {
    if (arr.length) {
        console.log(arr.length);
    }
}

因为在达到第二个条件检查时,JS已经知道
arr
是一个数组。

您的if应该是这样的
if((arr=[1])&&arr.length)

您需要为数组赋值部分赋予高优先级。先分配然后比较

优先权只不过是一个问题。哪个部件代码首先基于运算符优先级执行,因此在代码中
&&
的优先级高于赋值运算符
=
,因此,当arr未赋值时,它是未定义的

var-arr;
//arr在这里是一个数组,但为什么不能指定给length属性?
if((arr=[1])&&arr.length){
控制台日志(arr.length);

}
您的if应该是这样的
if((arr=[1])&&arr.length)

您需要为数组赋值部分赋予高优先级。先分配然后比较

优先权只不过是一个问题。哪个部件代码首先基于运算符优先级执行,因此在代码中
&&
的优先级高于赋值运算符
=
,因此,当arr未赋值时,它是未定义的

var-arr;
//arr在这里是一个数组,但为什么不能指定给length属性?
if((arr=[1])&&arr.length){
控制台日志(arr.length);
}
由于以下原因而失败<代码>&的优先级高于赋值
=
,因此首先对其求值

[1]&&arr.length
表达式由数组文本和
arr.length
表达式组成。并且
arr.length
失败,因为
arr
在该点未定义

参考资料:

由于以下原因而失败<代码>&的优先级高于赋值
=
,因此首先对其求值

[1]&&arr.length
表达式由数组文本和
arr.length
表达式组成。并且
arr.length
失败,因为
arr
在该点未定义

参考资料:


JS将您的
if
语句解析为

 if (arr = ([1] && arr.length)) { 
原因是
&&
绑定比赋值运算符更紧密。因此,JS试图在尚未定义
arr
的时间点评估
[1]&&arr.length

你需要写作

if ((arr = [1]) && arr.length) { 

JS将您的
if
语句解析为

 if (arr = ([1] && arr.length)) { 
原因是
&&
绑定比赋值运算符更紧密。因此,JS试图在尚未定义
arr
的时间点评估
[1]&&arr.length

你需要写作

if ((arr = [1]) && arr.length) { 

在IF中指定变量是一种代码气味

var arr;
var x = 1;

if (arr = [1] && arr.length && x == 1) { 
    console.log(arr.length);
}
上面的if条件是什么样子的?大多数人可能不知道您正在为
arr
赋值,但认为您正在检查
arr==[1]

更好的例子是:

var arr = [1];

if (arr.length > 0) { 
    console.log(arr.length);
}

在IF中指定变量是一种代码气味

var arr;
var x = 1;

if (arr = [1] && arr.length && x == 1) { 
    console.log(arr.length);
}
上面的if条件是什么样子的?大多数人可能不知道您正在为
arr
赋值,但认为您正在检查
arr==[1]

更好的例子是:

var arr = [1];

if (arr.length > 0) { 
    console.log(arr.length);
}

var arr;//arr在这里是一个数组,但为什么不能指定给length属性?if((arr=[1])&&arr.length){console.log(arr.length);}var arr;//arr在这里是一个数组,但为什么不能指定给length属性?如果((arr=[1])&&arr.length){console.log(arr.length);}你不明白我在问什么你不明白我在问什么