javascript - 这两行是什么意思 : o[x] = o[x] || {}; o = o[x];

标签 javascript function namespaces

这是我得到的代码,但我不知道这两行是什么意思:

o[arr[i]] = o[arr[i]] || {};
o = o[arr[i]]; 

完整代码:

var GLOBAL={};
GLOBAL.namespace=function(str){
    var arr = str.split("."), o=GLOBAL;

    for(i=(arr[0]=="GLOBAL") ? 1 : 0; i<arr.length; i++){
        o[arr[i]] = o[arr[i]] || {};
        o = o[arr[i]];
    }
};

GLOBAL.namespace("A.Dog");
// GLOBAL.A = {};
// GLOBAL.A.Dog = {};
GLOBAL.A.Dog.name = "diudiu";
alert(GLOBAL.A.Dog.name)

最佳答案

逐步分解以使其更清晰:

o[arr[i]] = o[arr[i]] || {};

等同于:

var x = arr[i];
o[x] = o[x] || {};

等同于:

var x = arr[i];
if (o[x] == undefined) {
  o[x] = {};
}

模式A = B || DEFAULT_VALUE 是一个习惯用法,它使用了 || 运算符的短路特性。在 javascript 中,|| 运算符不返回 truefalse 而是返回第一个非假值或 false。因此,如果第一个变量不是假的,它会计算出第一个变量的值,否则它会计算出第二个变量的值。

关于javascript - 这两行是什么意思 : o[x] = o[x] || {}; o = o[x];,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409573/

相关文章:

php - mysql 查询在函数中使用时不起作用

kubernetes - 一个 Metricbeat Pod 来监控多个 RabbitMQ 容器

c++ - 不同头文件中跨相同命名空间的 typedef

c# - 移动/更新命名空间声明时如何阻止 ReSharper 删除未使用的 Using 语句?

javascript - AngularJS "not well-formed",但仍显示在 Firefox 中

c - 4个变量函数的平均值打印 "4.00000"(除以4)而不是实际的平均值

javascript - 具有许多功能的 JQuery 选择器无法正常工作

python - 如何使用两个数组作为返回值压缩函数 - Python

javascript - 如何识别用户从哪个页面登陆到另一个页面?

javascript - 将本地存储转换为 Chrome 存储以获取和设置