Ale*_*lex 59 javascript variable-assignment logical-operators and-operator
我知道在JavaScript中你可以这样做:
var oneOrTheOther = someOtherVar || "these are not the droids you are looking for...";
Run Code Online (Sandbox Code Playgroud)
其中变量oneOrTheOther将在第一表达式的值,如果它不是null,undefined或false.在这种情况下,它被分配给第二个语句的值.
但是,oneOrTheOther当我们使用逻辑AND运算符时,变量会分配给什么?
var oneOrTheOther = someOtherVar && "some string";
Run Code Online (Sandbox Code Playgroud)
什么时候会发生someOtherVar非假的?假的
时候会发生什么someOtherVar?
只是学习JavaScript,我很好奇与AND运算符一起分配会发生什么.
CMS*_*CMS 76
基本上,逻辑AND运算符(&&)将返回第二个操作数的值,如果第一个操作数是真值,并且它将返回第一个操作数的值,如果它本身是假的,例如:
true && "foo"; // "foo"
NaN && "anything"; // NaN
0 && "anything"; // 0
Run Code Online (Sandbox Code Playgroud)
需要注意的是falsy值是那些强迫要false在布尔上下文中使用时,它们是null,undefined,0,NaN,一个空字符串,当然false,什么都强求来true.
myk*_*hal 26
&&有时被称为守卫操作员.
variable = indicator && value
Run Code Online (Sandbox Code Playgroud)
只有当指标真实时,它才能用于设置值.
Dan*_*llo 18
引用道格拉斯·克罗克福德1:
的
&&操作者产生其第一个操作数的值,如果所述第一操作数是falsy.否则它产生第二个操作数的值.
1 Douglas Crockford:JavaScript:好的部分 - 第16页
Jas*_*ing 14
如果您尝试访问"user.name"但是会发生这种情况:
Uncaught TypeError: Cannot read property 'name' of undefined
Run Code Online (Sandbox Code Playgroud)
不要害怕.您可以使用赋值中的&&运算符来解决此问题,或者通常称为保护运算符,因为它" 防范 "未定义的错误发生.
以下是一些您可能会发现奇怪的例子,但请继续阅读,稍后会对此进行解释.
var user = undefined;
var username = user && user.username;
// no error, "username" assigned value of "user" which is undefined
user = { username: 'Johnny' };
username = user && user.username;
// no error, "username" assigned 'Johnny'
user = { };
username = user && user.username;
// no error, "username" assigned value of "username" which is undefined
Run Code Online (Sandbox Code Playgroud)
说明:在保护操作中,每个术语一次从左到右进行一次评估.如果评估的值是假的,则评估停止,然后分配该值.如果到达最后一个项目,则分配它是否是假的.
falsy意味着它是这些价值中的任何一个,undefined, false, 0, null, NaN, ''而真正的意思并不是虚假的.
Guard方法的简易按钮
使用lodash的漂亮守护运算符来访问嵌套数据,如下所示:
// need to access obj.has.some.very.nested.stuff
var val = _.get(obj, 'has.some.very.nested.stuff');
Run Code Online (Sandbox Code Playgroud)
因为它处理引擎盖下的&&东西,同时很方便使用方便的方法.Lodash _.get源代码
实际使用中另一个有用的奇怪任务是OR运算符,它通常用于插件,如下所示:
this.myWidget = this.myWidget || (function() {
// define widget
})();
Run Code Online (Sandbox Code Playgroud)
如果"this.myWidget"是假的,它将只分配代码部分.这很方便,因为您可以在任何地方声明代码,如果之前已经分配过,则可以多次声明代码,知道它只会被分配一次,因为使用插件的人可能会意外地多次声明您的脚本标记src.
说明:每个值从左到右进行计算,一次一个.如果值是truthy,它停止评估并分配该值,否则,不断去,如果达到了最后一个项目,它不管分配,如果它是falsy与否.
你现在拥有极致的力量,可以做很奇怪的事情,例如在回文中使用它的这个非常奇怪的例子.
function palindrome(s,i) {
return (i >= s.length/2) || (s[i] === s[s.length -1 - i]) && palindrome(s, ++i);
}
Run Code Online (Sandbox Code Playgroud)
在这里深入解释:在Javascript中的回文检查
快乐的编码.
| 归档时间: |
|
| 查看次数: |
16359 次 |
| 最近记录: |