||运算符在 null 时不设置默认值
|| operator not setting default when null
我正在运行这一行:
var good = data["good"] || false;
其中data
来自 jquery ajax 请求中的 success
方法。
但是,我认为这会做的是默认good
false
如果data["good"]
为空,但事实并非如此。
Chrome 正在抛出这个:
Uncaught TypeError: Cannot read property 'good' of null
既然是null
,good
不应该设置为false
吗?
问题不在于data["good"]
是null
,而在于data
本身是null
。
如果代码始终具有值,但可能没有属性good
,则按原样编写代码可以data
。但不幸的是,JavaScript引擎不会检查语句中的所有内容是否未定义或为空,即它不会测试data
,然后测试data["good"]
等等。
您需要先测试data
是否至少具有某种价值,即它是"真实的"。
修复 1
您可以像这样清楚地布置它:
var good = false;
if(data && data["good"]) {
good = data["good"];
}
修复 2
或者一个巧妙的快捷方式是使用 &&
和 ||
将返回找到的第一个"真实"值的事实 - 它不必是布尔值:
var good = (data && data["good"]) || false;
关于运算符的 jquery 教程很好地解释了从 &&
和 ||
运算符返回的内容。
// has a value - sets to "foo"
var data1 = { good: 'foo' };
var good1 = (data1 && data1["good"]) || false;
document.write("<div>" + good1 + "</div>");
// data is null - sets to false
var data2 = null;
var good2 = (data2 && data2["good"]) || false;
document.write("<div>" + good2 + "</div>");
// data["good"] doesn't exist - sets to false
var data3 = { bad: 'hello' };
var good3 = (data3 && data3["good"]) || false;
document.write("<div>" + good3 + "</div>");
假妖孽!
另一件需要注意的事情是,您希望存储在变量中的某些值的计算结果可能为 false,因此您可能会错误地以 good = false
结束。这取决于您期望在data["good"]
里面是什么。
这将发生在以下情况下,同样来自 jquery 站点:
-
false
- 布尔假值 -
""
- 空字符串 -
NaN
- "非数字" - 空 - 空值
-
undefined
- 未定义的值(即,如果数据没有属性"好") -
0
- 数字零。
如果您认为可能是这种情况,您可能需要在检查中更具体:
var data = { good: 0 };
// 0 is falsy, so incorrectly sets to false
var good = (data && data["good"]) || false;
document.write("<div>" + good + "</div>");
// check the actual type and value - correctly set to 0
var good2 = (data && (typeof data["good"] != "undefined") && data["good"] != null)
? data["good"] : false;
document.write("<div>" + good2 + "</div>");
在您的情况下,我无法想象单行代码,它将检查data
是否不为空,如果是,则data[good]
放入变量中。
你必须首先摆脱Exception
.我宁愿做:
var good = false;
if(data){
good = data["good"] || false;
}
相关文章:
- jQuery Datepicker从日期开始设置默认值
- 在KeystoneJS中为Types.Money设置默认值
- 如何为显示jquery滑块值的文本框设置默认值
- 在Bootstrap下拉菜单中设置默认值
- 如何为 jquery 自动完成框设置默认值
- 聚合物:如何为具有嵌套特性的图纸选项卡设置默认值
- 使用复杂对象上的删除为选择框手动设置默认值
- 在动态输入数据的下拉菜单中设置默认值
- 有什么方法可以在超级测试中设置默认值吗
- 挖空 + 选择2 -- 设置默认值
- ||运算符在 null 时不设置默认值
- 如何在 Select2 输入中设置默认值,并在 asp.net mvc 中标记
- 在链接回以前访问过的页面时设置默认值
- PHP 设置默认值以从 ajax 页面返回记录
- 在文档加载时使用 JQuery 在下拉字段中设置默认值
- 如何为 Google 放置 API 自动完成文本框设置默认值
- 为具有未定义值的嵌套对象设置默认值的最简单方法
- AngularJS更新ng-model的值以设置默认值
- 剑道 UI 组合框 - 设置默认值
- JQuery 日期选取器设置默认值