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