Javascript ||运算符未设置为空时的默认值
我在运行这条线路:Javascript ||运算符未设置为空时的默认值,javascript,Javascript,我在运行这条线路: var good = data["good"] || false; 其中,data来自jqueryajax请求中的success方法 但是,如果data[“good”]为空,我认为这将默认good为false,但它不是空的 Chrome正在抛出以下内容: Uncaught TypeError: Cannot read property 'good' of null 既然它是null,那么good不应该设置为false?问题不在于数据[“good”]是null,而在于数据本
var good = data["good"] || false;
其中,data
来自jqueryajax请求中的success
方法
但是,如果data[“good”]
为空,我认为这将默认good
为false
,但它不是空的
Chrome正在抛出以下内容:
Uncaught TypeError: Cannot read property 'good' of null
既然它是
null
,那么good
不应该设置为false
?问题不在于数据[“good”]
是null
,而在于数据本身是null
如果数据
始终有一个值,但可能没有属性良好
,那么您的代码就可以了。但不幸的是,JavaScript引擎不会检查语句中的所有内容是否都未定义或为null,即它不会测试数据,然后测试数据[“good”]
,依此类推
您需要首先测试数据是否至少具有某种类型的值,也就是说,它是“真实的”
修正1
您可以这样清楚地进行布局:
var good = false;
if(data && data["good"]) {
good = data["good"];
}
修正2
或者一个简洁的快捷方式是使用这样一个事实,即&&
和|
将返回找到的第一个“truthy”值-它不必是布尔值:
var good = (data && data["good"]) || false;
对从&&
和|
运算符返回的内容有很好的解释
//有一个值-设置为“foo”
var data1={good:'foo'};
var good1=(data1&&data1[“good”])| false;
文件。写(“+good1+”);
//数据为null-设置为false
var-data2=null;
var good2=(data2&&data2[“good”])| | false;
文件。写(“+good2+”);
//数据[“良好”]不存在-设置为false
var data3={bad:'hello'};
var good3=(data3&&data3[“good”])| | false;
文件。写(“+good3+”)
问题不在于数据[“好”]
是空的
,而在于数据本身是空的
如果数据
始终有一个值,但可能没有属性良好
,那么您的代码就可以了。但不幸的是,JavaScript引擎不会检查语句中的所有内容是否都未定义或为null,即它不会测试数据,然后测试数据[“good”]
,依此类推
您需要首先测试数据是否至少具有某种类型的值,也就是说,它是“真实的”
修正1
您可以这样清楚地进行布局:
var good = false;
if(data && data["good"]) {
good = data["good"];
}
修正2
或者一个简洁的快捷方式是使用这样一个事实,即&&
和|
将返回找到的第一个“truthy”值-它不必是布尔值:
var good = (data && data["good"]) || false;
对从&&
和|
运算符返回的内容有很好的解释
//有一个值-设置为“foo”
var data1={good:'foo'};
var good1=(data1&&data1[“good”])| false;
文件。写(“+good1+”);
//数据为null-设置为false
var-data2=null;
var good2=(data2&&data2[“good”])| | false;
文件。写(“+good2+”);
//数据[“良好”]不存在-设置为false
var data3={bad:'hello'};
var good3=(data3&&data3[“good”])| | false;
文件。写(“+good3+”)代码>在您的情况下,我无法想象有一个线性函数会检查数据是否为空,如果为空,则将数据[good]
放入变量中
首先,您必须排除异常。
我宁愿:
var good = false;
if(data){
good = data["good"] || false;
}
在您的情况下,我无法想象有一个线性函数会检查data
是否为空,如果为空,则将data[good]
放入变量中
首先,您必须排除异常。
我宁愿:
var good = false;
if(data){
good = data["good"] || false;
}
我正要写同样的,但它是不正确的<代码>好
在任何情况下都不会有数据[good]的值-OP未提及数据[good]将只包含布尔值。哦。。。好吧,我以为它检查了我要写的所有东西,但它不正确<代码>好
在任何情况下都不会有数据[good]的值-OP未提及数据[good]将只包含布尔值。哦。。。好吧,我以为它检查了一切