以下条件语句在未定义值时引发异常:
if (!(e = e[f])) {
e[f] = {};
}
而以下内联条件不会引发任何异常:
e = e[f] ? e[f] : e[f] = {};
这是包含条件的函数,它负责从窗口对象开始动态创建对象:
function t(a, c) {
var s = a.split('.'),
e = window;
// works only in IE
!(s[0] in e) && e.execScript && e.execScript('var '+ s[0]);
for (var f; s.length && (f = s.shift()); ) {
if (!s.length && void 0 !== c) {
e[f] = c;
}else {
e = e[f] ? e[f] : e[f] = {};
}
}
}
调用此函数的示例:
t('s.d');
此调用应创建一个新对象:window.s.d
有没有人知道发生了什么?