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
在该点未定义
参考资料:
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);}你不明白我在问什么你不明白我在问什么