初学者示例
如果您尝试访问“ user.name”,但是会发生这种情况:
Uncaught TypeError: Cannot read property 'name' of undefined
不要害怕。您可以在分配中使用&&运算符来解决此问题,或者通常将其称为guard运算符,因为它可以“保护”未发生的未定义错误。
这是一些示例,您可能会觉得很奇怪,但请继续阅读,如后面所述。
var user = undefined;
var username = user && user.username;
user = { username: 'Johnny' };
username = user && user.username;
user = { };
username = user && user.username;
说明:在防护操作中,每个术语一次从左到右求值。如果评估的值是虚假的,则评估会停止,然后分配该值。如果到达最后一个项目,则将其分配为是否伪造。
虚假意味着它是这些价值观中的任何一种,undefined, false, 0, null, NaN, ''
而诚实只是意味着不虚假。
卫队方法简易按钮
使用lodash的漂亮的Guard运算符访问嵌套数据,如下所示:
var val = _.get(obj, 'has.some.very.nested.stuff');
因为它可以很好地处理&&内容,同时又可以方便地使用。Lodash _.get源代码
奖励:或运算符
实际使用中的另一个有用的奇怪分配是OR运算符,该运算符通常用于如下所示的插件:
this.myWidget = this.myWidget || (function() {
})();
仅在“ this.myWidget”错误时才分配代码部分。这很方便,因为您可以在任何地方声明代码,而无需在意是否多次分配代码,而不必担心,因为知道该代码只会被分配一次,因为使用插件的人可能会不小心多次声明您的脚本标签src。
说明:每个值都是从左到右评估的,一次一次。如果值是真实的,则它将停止评估并分配该值,否则,将继续进行下去,如果到达最后一项,则无论是否为假,都将对其进行分配。
额外信用:结合&&和|| 在作业中
您现在拥有最终的力量,可以做一些非常奇怪的事情,例如在回文集中使用它的非常奇怪的例子。
function palindrome(s,i) {
return (i >= s.length/2) || (s[i] === s[s.length -1 - i]) && palindrome(s, ++i);
}
在此深入解释:Java中的回文检查
快乐的编码。