存在性定义变量,以避免现有重挫变量,我有这样的快捷方式在JavaScript
window.x = typeof x != "undefined" ? x : {}
这似乎是一个很长篇大论方式来定义一些代码,但要避免控制台错误。
我试了一下,而且它似乎工作正常。定义一个这样的变量可以吗?
window.x=window.x||{}
甚至在全球范围内...
x=this.x||{}
存在性定义变量,以避免现有重挫变量,我有这样的快捷方式在JavaScript
window.x = typeof x != "undefined" ? x : {}
这似乎是一个很长篇大论方式来定义一些代码,但要避免控制台错误。
我试了一下,而且它似乎工作正常。定义一个这样的变量可以吗?
window.x=window.x||{}
甚至在全球范围内...
x=this.x||{}
如果您在使用此结构:
window.x=window.x||{}
而且x
被定义,但有一个falsy值(零,空字符串,null,NaN,未定义,当然也是false),那么该值将被一个新的空对象覆盖。如果这对你是可以接受的,因为你确信x
要么是完全未定义的,要么已经被定义为一个对象,那么确定,继续...
这些是非常不同的。
首先,没有检查typeof ... === 'undefined'
你基本上会重写任何'falsy'值。但这是微不足道的,还有更微妙的细微差别。
window.x = typeof x != "undefined" ? x : {}
这将分配的一些x
值(不是必需的全球性的,它可以是本地或x
本地x
一些外功能),以全球x
(window.x
)。当“本地”x将超出范围时,其在分配时的值仍将存储在window.x
变量中。
window.x = window.x || {}
这只适用于window.x
;即使我们现在忘记了关于falsy的值,它仍然不能像第一个那样工作(它甚至不检查'local'x
的存在)。
x = this.x || {}
而这一次可能会完全失控时this
是挥发物(事件处理,超时功能,仅举几例),并且不会外部函数中的身体在‘使用严格’模式被允许。
这里是如何避免重挫console.log
具体为:?
var console = window.console || {"log": function(){} };
在一般情况下,使用dispatch table如果你想避免默认(||)或三元(:)运营商:
/* Check for IE Mutation Event */
var browser = "onpropertychange" in document;
/* Map boolean values to variables */
var detect = { "true": ie_param, "false": w3_param };
/* Map string templates with escaped quotes to variables */
var w3_param = [".addEventListener","\u0022DOMAttrModified\u0022",",false"];
var ie_param = [".attachEvent","\u0022onpropertychange\u0022",""];
/* Shadow array indices with key/value pairs */
var api = {"event":0,"attribute":1,"state":2};
/* Generate DOM lookup based on boolean value and matching string template */
var result = "document.getElementsByTagName(\u0022body\u0022)[0]".concat(detect[browser][api.event], "(", detect[browser][api.attribute], ",alert", detect[browser][api.state], ")");
/* Execute generated code */
var lazy = Function(result);
可选指向元素数组的对象。对象始终具有相同数量的键/值对,并且每个数组元素始终具有相同的大小。因此,可以通过名称或值来访问数组索引。
参考
[Wikipedia page](http://en.wikipedia.org/wiki/Existentialism)可能会给你一些提示...... – nnnnnn