使用OR条件声明对象的目的是什么?

时间:2014-09-30 10:40:23

标签: javascript

var myApp = myApp || {}; 

我明白上面的内容是做什么的。但它的最佳用例是什么?为什么这种格式没有在Python或PHP等其他语言中使用?

2 个答案:

答案 0 :(得分:5)

这种代码用于避免代码中未设置变量的错误。就像在这种情况下:

function sayHello(name) {
    return "Hello " + name;
}

sayHello(); // "Hello undefined"

function lengthOf(obj) {
    return obj.length;
}

lengthOf(); // ReferenceError cannot read property length of undefined

您可以通过添加一个简单的行来避免它:

function sayHello(name) {
    var name = name || "";
    return "Hello " + name;
}

sayHello(); // "Hello "
sayHello("Mike"); // "Hello Mike"

function lengthOf(obj) {
   var obj = obj || [];
   return obj.length;
}

lengthOf(); // 0
lengthOf([1,2,3]); // 3

在PHP中,您可以使用isset()函数:

来完成
if (!isset($variable)) $variable = "";

现在您可以使用您的变量而不会收到任何错误或意外结果。

答案 1 :(得分:1)

一个用例是,如果你有两个使用相同变量/ ns的脚本,并且你想确保只创建一个新的脚本,除非它已经被定义。

您可以使用它来模拟javascript中的命名空间:

(function(api){

/* private functions here */

api.apiFunction = function(){ /* useful code*/ }

})(window.myNamespace = window.myNamespace || {})

您稍后可能加载的任何其他脚本,您希望成为同一名称空间的一部分,然后只使用相同的语法来附加新功能:

(function(api){

/* private functions here */

api.anotherApiFunction = function(){ /* useful code*/ }

})(window.myNamespace = window.myNamespace || {})

anotherApiFunction现在附加到同一名称空间。您可以访问以下两个函数:

myNamespace.apiFunction();
myNamespace.anotherApiFunction();