我做了一些研究,但我还没有找到令人满意的答案.我有一个javascript项目文件和一个库,其中一些函数定义如下:
//Library.js
FElib = {
initLib: function(param1, param2){
var init = param1 || true;
console.log(init);
}
}
Run Code Online (Sandbox Code Playgroud)
现在在我的project.js文件中,我调用该函数并将false作为参数传递
FElib.initLib(false, 'test');
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果我在变量声明之前记录它,param1会给我'false'.之后它使用默认的'true'.它似乎是解释错误的未定义我认为它只检查undefined ..
为什么这样的行为?
当我使用字符串时,它完全正常工作.使用0或1作为参数也不起作用,并且它使用默认变量声明.
作为一种解决方法,我将变量声明为一个对象,它再次正常工作:
//Library.js
FElib = {
initLib: function(options){
var defaults = {
param1: true,
param2: 'string',
};
var options = $.extend({}, defaults, options);
}
}
Run Code Online (Sandbox Code Playgroud)
现在调用函数即使使用布尔参数也能正常工作:
FElib.initLib({'param1':false, 'param2':'string123'});
Run Code Online (Sandbox Code Playgroud)
第二种方法似乎只有一点开销,只考虑一个布尔变量作为参数.
任何人都可以解释这种行为吗?
Nie*_*sol 11
UH ...因为init = param1 || true没有检查不确定性,它正在检查虚假.
显然,假是虚假的,因此它被替换为真.
如果你想检查undefinedness,它没有真正的简写:
var init = typeof param1 === "undefined" ? true : param1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6466 次 |
| 最近记录: |