模棱两可的电话?javascript函数和对象

模棱两可的电话?javascript函数和对象,javascript,ambiguous-call,Javascript,Ambiguous Call,我在jQuery中看到了这一点 var a= 'something' || function () { } 或 这是什么意思?我知道{}在javascript中是一个json对象,我知道javascript中有匿名函数,但我仍然不知道这意味着什么 提前感谢您的帮助。引用MDC上的 此外,还有短路评估: 当逻辑表达式从左到右求值时,将使用以下规则测试它们是否存在“短路”求值 因此,如果expr1可以计算为true,则不会计算expr2 jQuery使用了很多短路计算来定义变量的默认值。如。 v

我在jQuery中看到了这一点

var a= 'something' || function () {

}

这是什么意思?我知道{}在javascript中是一个json对象,我知道javascript中有匿名函数,但我仍然不知道这意味着什么

提前感谢您的帮助。

引用MDC上的

此外,还有短路评估: 当逻辑表达式从左到右求值时,将使用以下规则测试它们是否存在“短路”求值

因此,如果expr1可以计算为true,则不会计算expr2

jQuery使用了很多短路计算来定义变量的默认值。如。 var o=选项| |{}; 将选项放入变量o中;但如果选项未定义或为null,则将确保o初始化为{},并在MDC上引用

此外,还有短路评估: 当逻辑表达式从左到右求值时,将使用以下规则测试它们是否存在“短路”求值

因此,如果expr1可以计算为true,则不会计算expr2

jQuery使用了很多短路计算来定义变量的默认值。如。 var o=选项| |{};
将选项放入变量o中;但是,如果选项未定义或为空,将确保o初始化为{},您很可能包含了一个错误的示例。您的代码是有效的,但编写起来却毫无用处,因为您正在将一个已知字符串赋给一个变量,这使得下面的
语句毫无用处

常见的语法如下:

function foo(bar) {
   // set baz to the contents of bar
   // or create an empty object if bar evaluates to false
    var baz = bar || {}; 
}

您很可能包含了一个错误的示例。您的代码是有效的,但编写起来却毫无用处,因为您正在将一个已知字符串赋给一个变量,这使得下面的
语句毫无用处

常见的语法如下:

function foo(bar) {
   // set baz to the contents of bar
   // or create an empty object if bar evaluates to false
    var baz = bar || {}; 
}
这种“条件赋值”是语言中的一种常见习惯用法,它利用布尔运算符的短路(如本例中的“或”)将左侧表达式的值赋值给变量(如果其计算结果为“真”值),或者将右侧表达式的值赋值给变量(如果不是)。考虑:

var nullOrFive = null || 5; // => 5
左侧(
null | | five
)从左到右求值,将每个操作数测试到OR运算符,直到找到一个“真实”的操作数并返回它。另一方面:

var tenOrWhatever = 10 || someMethodThatIsNeverCalled(); // => 10
因此,在您的示例中,如果“something”的计算结果为true(在JavaScript中不是“undefined”、“null”和零),那么变量“a”将获得其值,否则它将获得函数(
function(){…}
)或对象文本(
{}
)。

这种“条件赋值”是语言中的一种常见习惯用法,它利用布尔运算符的短路(如本例中的“或”)为变量指定左侧表达式的值(如果其计算结果为“真”值),或为右侧表达式的值(如果不是)。考虑:

var nullOrFive = null || 5; // => 5
左侧(
null | | five
)从左到右求值,将每个操作数测试到OR运算符,直到找到一个“真实”的操作数并返回它。另一方面:

var tenOrWhatever = 10 || someMethodThatIsNeverCalled(); // => 10

因此,在您的示例中,如果“something”的计算结果为true(在JavaScript中不是“undefined”、“null”和零),那么变量“a”将获得其值,否则它将获得函数(
function(){…}
)或对象文本(
{}
)。

为变量赋值时,JavaScript正在计算给定的表达式

var s= s || {};
这意味着,如果当前范围中已存在名为s的变量,则新创建的s变量将指向该变量。否则,如果s变量未在当前范围中定义,或者它指向空引用,或者指向计算为FALSE的其他值,则新创建的s变量将指向新对象。这在扩展多个文件中的一个对象时非常有用:

File1

var globalNamespace = globalNamespace  || {};
globalNamespace.someVariable  = "some value;"
文件2

var globalNamespace = globalNamespace  || {};
globalNamespace.someFunction = function()
{
    return this.someVariable;
};

通过这种方式,可以扩展globalNamespace对象,而不必担心代码会被放入多个文件。

当为变量赋值时,JavaScript会计算给定的表达式

var s= s || {};
这意味着,如果当前范围中已存在名为s的变量,则新创建的s变量将指向该变量。否则,如果s变量未在当前范围中定义,或者它指向空引用,或者指向计算为FALSE的其他值,则新创建的s变量将指向新对象。这在扩展多个文件中的一个对象时非常有用:

File1

var globalNamespace = globalNamespace  || {};
globalNamespace.someVariable  = "some value;"
文件2

var globalNamespace = globalNamespace  || {};
globalNamespace.someFunction = function()
{
    return this.someVariable;
};

通过这种方式,可以扩展globalNamespace对象,而不必担心代码会被放入多个文件。

请发布几行真正的代码;我很确定你引用错了。(a)
{}
不是JSON,它是一个空的JavaScript对象。(b) 什么是模糊函数?你的意思是匿名吗?这可能是很常见的JavaScript速记。事实上,我想写的是含糊不清的,所以感谢你的更正:)请发布几行真实的代码;我很确定你引用错了。(a)
{}
不是JSON,它是一个空的JavaScript对象。(b) 什么是模糊函数?你的意思是匿名吗?这可能是很常见的JavaScript速记。事实上,我想写的是含糊不清的,想写匿名,所以谢谢你的更正:)同意;在上面的例子中,看起来,
'something'
是一个字符串,这个模式不起作用,因为非空字符串永远不会出错。好吧,更正你的答案是第一个答案我错了,我完全错了,谢谢你的启示:D我现在了解了jQuery在使用这段代码时发生了什么,非常感谢。同意;在上面的示例中,看起来
'something'
是一个字符串,此模式不起作用