理解{}”;构造
Understanding the "|| {}" construct in javascript
可能重复:
什么是“var FOO=FOO||{}rdquo;在Javascript中是什么意思
Javascript-你能为变量声明添加条件吗
我认为这与范围界定有关,而不是重新定义范围。我在流行的javascript框架中看到了很多这样的东西:
var something = something || {};
这是因为没有意外地重新定义一个顶级变量吗?
你是对的。如果变量已经存在(不管是不是我们的),不要更改它。如果它不存在,让我们创建一个新的。
var something = something || {};
可以在具有可能未设置的参数的函数内部使用
function doStuff( arg1, arg2, arg3 ) {
arg2 = arg2 || {};
arg3 = arg3 || arg1 + 2;
};
这使得当您调用函数doStuff 时,第二个和第三个参数是可选的
这将创建一个具有本地作用域的新对象。如果外部something
为null、false或undefined(或以其他方式为falsy),则新变量将为空对象{}
。
您不是在重新定义范围,您只是在确保一个变量存在于现有范围内。赋值语句可以读作:
"如果something
存在(而不是undefined
、null
、0
或false
),则设置something = something
(即不执行任何操作)。如果不存在,则创建它并将其设置为空对象文字"
这与执行相同
var something = ( something ) ? something : {};
其中( something )
是对真值或假值的评估。如果truthy(something
存在),它将等于自己,否则就是一个空对象。
此构造对于不覆盖现有数据非常有用。假设我们正在处理多个Javascript文件,并且希望共享某个对象上的一些数据。
a.js
var share = window.share = share || { };
share.thisIsA = true;
b.js
var share = window.share = share || { };
share.thisIsB = true;
如果我们有两个以上的文件,并且异步加载这些文件(我们不能保证顺序),那么如果之前定义并填充了全局 另一个非常常见的用例是创建默认值。例如 在那里,如果函数在没有参数的情况下被调用,我们使用模式为我们的选项参数至少有一个已知和定义的值。例如,你可以在插件代码中经常看到这一点。share
对象,则不会覆盖该对象。这是名称空间对象或配置对象function foo( option ) {
option = option || 'something';
if( option === 'foobar' ) {} // ...
}
看起来更像是在确保某个对象是可以挂起东西的对象。设置默认值。
一旦你调用var something或将其设置为函数的参数,该范围内的所有实例都是新变量,你就无法访问更高范围内的实例。
(function() {
var something = 'foo';
(function() {
var something = something || 'bar';
console.log(something);
})();
console.log(something);
})();
将输出
'bar'
'foo'
javascript中的OR构造函数接近这个函数
function or(a, b)
{
if(a) return a;
else return b;
}
当"a"计算为true时,它甚至不检查"b"(也不执行它,但它不是函数情况)。此外,它返回纯"a",而不将其更改为布尔值。非布尔变量"ORed"的构造计算为第一个变为布尔true的值。它被广泛用于某些无法支撑的地方。
var functionDoingSomethingCrossBrowser = functionOnMsie
|| functionEverywhereElse;
当你的"something"在作用域中不可用时(很可能是未定义的,计算结果为false),这个与{}
(新对象)操作符相结合的运算符用空对象填充变量。
- ES6构造函数返回基类的实例
- JQuery需要帮助理解(i,el)
- 使用Google Visualization动态调用构造函数
- javascript解释器如何理解变量的数据类型
- 我可以'我似乎不知道如何修复javascript中的两个lint.有人能帮我理解吗
- JavaScript的额外材料:理解奇怪的部分
- 如何使用内部对象构造对象
- 无法理解JavaScript中的静态方法
- javascript中对象构造函数中的var属性与this.properties
- 理解typescript中的构造函数接口
- 理解{}”;构造
- 试图理解JavaScript中原型和构造函数之间的区别
- 无法理解此 JavaScript 构造
- 理解构造函数调用模式中的“this”
- 理解对象构造函数中使用的原型
- 理解JavaScript中的构造函数
- 理解Javascript中作为方法和构造函数调用的函数的隐私性和作用域
- 理解javascript中的构造函数属性
- 理解闭包:构造一个将函数排列在一起的元函数
- 理解Javascript构造函数:自定义create方法