gpt4 book ai didi

javascript - 这两种 JavaScript 模式中哪一种更适合实例化对象?

转载 作者:行者123 更新时间:2023-12-03 05:07:00 25 4
gpt4 key购买 nike

  1. 以下两种模式是否有任何优点,或者它们是否完全相同,但只是使用 if else 简写?

    这个

    if ((typeof ShopScript) === 'undefined') { ShopScript = {}; }

    还是这个?

    window.ShopScript = window.ShopScript || {};
  2. 我对 window.ShopScript 很好奇...在任何一种情况下,ShopScript 对象是否附加到窗口(是否有其他合理甚至可能的情况) ?

  3. 这些常见或已知的模式是否有术语来引用它们?也就是说,如果我尝试将这篇文章的标题问题改写为“模式 A 和 B 之间有什么区别”,那么 A 和 B .. 会是什么?

最佳答案

第一个代码段没有声明 ShopScript,这不是一件好事。如果您在全局范围内,则可以使用 var 来做到这一点:

if (typeof ShopScript === 'undefined') {
var ShopScript = {};
}

但是由于 var 没有 block 作用域(这就是这里使用它的全部意义),因此您不再需要使用 typeof 来检查未定义性:

var ShopScript;

if (ShopScript === undefined) {
ShopScript = {};
}

如果您不在全局范围内,那么您需要以某种方式引用全局对象以向其添加属性(window,例如,在浏览器中):

if (typeof ShopScript === 'undefined') {
window.ShopScript = {};
}

但那时你也可以用它来检查;这里实际上没有太大区别:

if (window.ShopScript === undefined) {
window.ShopScript = {};
}

这也是使用 || 获取第二个片段的方法,这是相同的*,除了测试 window.ShopScript 是否为假,而不是它是否是特定的 未定义。对于添加全局“命名空间”对象的情况,这并不重要。

回答(2),是的,在严格模式之外分配给未声明的变量会将其放在全局对象上。在严格模式下,它会抛出错误,您应该使用严格模式。

* 它还无条件地重新分配 ShopScript,只有在 ShopScript 被定义为具有自定义描述符的属性时才具有可见效果。这种情况也没什么关系。

关于javascript - 这两种 JavaScript 模式中哪一种更适合实例化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41972195/

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