探索JavaScript的"或"

在JS中,逻辑运算符用于一个表达式返回的布尔结果的布尔逻辑。当一个值不能明确的用Ture或False表示的时候用||将返回non-boolean,比如undefined,null等。
简介
了解| |运算,让我们先看一个相当基本的例子。“或”可以用于提供默认值定义为一个变量如下:
var bar = false , foobar = 5, foo = bar || foobar; // foo = 5 
在这种情况下,如果bar的值是false,foo的值将仅仅取决去foobar,一个false值可以有“0”,“false”,"undefined","null" "NAN"or 空值 (e.g "").
这种模式可能看起来熟悉如果你所写的jQuery插件或使用$.extend().你会看到它实现当检查对象的一个选项可以显式指定或者设置为默认值:
function ( options ) { options = $.extend({}, defaults, options || {}); }
一些程序员也喜欢使用| |运算符设定明确的空值处理一个应用程序。这有助于确保值是null:
var foo = bar || null ; 
通常,你可能想要空值,但当你如此做的时候,这种固定格式不用怀疑是一个理想的值或如果它确实应该是一个null或变量.
你也会发现程序员选择这种方法初始化命名空间,选择namespace = namespace || {}声明其构成的对象,如下所示:
var namespace = namespace || { utils:{}, core:{} }; 
幕后
现在,JavaScript变量不是强类型,所以一个变量可以指定一个值(如数字),尽管被指定从布尔操作符:
console.log( null || NaN || undefined || false || 0 || 10); // outputs: 10
结果不是特别神奇,解释器检查值初始化的第一部分,null,他是一个false,并且继续直到false不被发现(或者如果没有true值存在,返回最后一个值).这是一个恶作剧,在动态语言里只有JavaScript可以这样,但不会工作在静态语言,这样会抛出type error的错误.
如果你想阅读更多有趣的类似这一例子的技术, short-circuit evaluation.看看这个,
这样,是否是有用的,OR运算符可以为函数提供一个默认值(就像我们刚才看到的):
function foo( a, b ){ a = a || 5; b = b || 6; console.log( 'Values:' + a + ',' +b ); } 
虽然,你就更有可能看到一个三元运算符来解决这个问题,或者类似的东西:
if (a && a === 5){ // do something }else { // do something else } 
你也许会问为什么。在我看来,其实都可以归结为两件事:
可读性:一些程序员觉得if/else容易读,但这无疑可以节约时间,不必求出表达式的值。我认为,我们还必须做同样的事如果其他人多,但可以归结为一种见仁见智的问题在一天结束的时候。我们还必须做同样的事用if/else.
性能:

Tags: 

延伸阅读

最新评论

发表评论