最佳实践 "OR" 和 "Ternary" 运算符
Best practice "OR" and "Ternary" operators
当我们为变量赋值时,最好使用 ||运营商或?运算符?
示例:
或
var x = window.scrollX || window.pageXOffset;
三元
var x = "scrollX" in window ? window.scrollX : window.pageXOffset;
最好的方法是什么?
var x = window.scrollX || window.pageXOffset;
以上方法有一些副作用。在这种情况下,JS中存在短路结构。无论 window.scrollX 接受什么,它总是会被接受。除非未定义,否则 x 的所有结果都是 window.scrollX
两者不等价
在第一个版本中,您检查 scrollX 值是否 'is'。也就是说,如果它是 undefined、false、null、0 等等。
在第二个版本中,您检查 window 对象是否具有 scrollX
属性。
例如:
如果您使用第一个并且 scrollX
值为 0
,它将使用 pageXOffset
属性 值,而在版本二中,它将使用 scrollX
值。
在控制台试试这个:
var a = { x: 0, y: 1 };
var or = a.x || a.y;
var tern = 'x' in a ? a.x : a.y;
console.log('or: ' + or);
console.log('tern: ' + tern);
当我们为变量赋值时,最好使用 ||运营商或?运算符?
示例:
或
var x = window.scrollX || window.pageXOffset;
三元
var x = "scrollX" in window ? window.scrollX : window.pageXOffset;
最好的方法是什么?
var x = window.scrollX || window.pageXOffset;
以上方法有一些副作用。在这种情况下,JS中存在短路结构。无论 window.scrollX 接受什么,它总是会被接受。除非未定义,否则 x 的所有结果都是 window.scrollX
两者不等价
在第一个版本中,您检查 scrollX 值是否 'is'。也就是说,如果它是 undefined、false、null、0 等等。
在第二个版本中,您检查 window 对象是否具有 scrollX
属性。
例如:
如果您使用第一个并且 scrollX
值为 0
,它将使用 pageXOffset
属性 值,而在版本二中,它将使用 scrollX
值。
在控制台试试这个:
var a = { x: 0, y: 1 };
var or = a.x || a.y;
var tern = 'x' in a ? a.x : a.y;
console.log('or: ' + or);
console.log('tern: ' + tern);