gpt4 book ai didi

javascript - 条件 javascript 语句抛出异常与内联条件

转载 作者:行者123 更新时间:2023-11-29 20:02:10 25 4
gpt4 key购买 nike

以下条件语句在未定义值时抛出异常:

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

有人知道发生了什么事吗?

最佳答案

第一种情况:

if (!(e = e[f])) {
e[f] = {};
}

您正在将 e(设置为 window 对象)设置为其 .s 属性(即 t( 's.d')).此属性未定义,用 ! “注意”此属性将返回 true,有效地使语句通过。在下一行 e 仍然是未定义的,当你这样做的时候

e[ f ] = {};

转化为:

undefined[ f ] = {};

这就是导致错误的原因。

第二种(三元)情况:

e = e[f] ? e[f] : e[f] = {};

这被解析为:

e = (e[f]) ? e[f] : e[f] = {};

并且不是

(e = e[f]) ? e[f] : e[f] = {};

如果在后一种情况下解析它,您将得到与条件情况相同的错误,因为第一个操作数 (e[f]) 将返回未定义,转到错误情况三元运算符 (e[f] = {})。这也将转换为 undefined[f] = {},这会导致错误。

关于javascript - 条件 javascript 语句抛出异常与内联条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13789497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com