此代码有什么问题?
var sha = 6;
var secondParameter = dan || sha;
alert(secondParameter);
我尝试过很多浏览器。没有警报。 如果我像这样添加var dan:
var sha = 6;
var dan = 5;
var secondParameter = dan || sha;
alert(secondParameter);
警报将会发生。那么“||”中的问题。我看到许多代码使用这样的运算符!所以我不知道......
答案 0 :(得分:7)
您没有定义dan
。执行在该错误处停止。检查浏览器控制台是否有错误。
当您定义dan
时,继续执行,但这可能不是您想要的。
JavaScript中此类代码的目的是说dan
是否有假值(任何评估为false
值的值,即0
,''
, null
,false
,undefined
或NaN
),然后使用sha
的值。
如果定义dan
超出了您的责任范围,(即其他一些脚本应该设置它),那么您可以使用如下构造检查其存在:
secondParameter = typeof(dan) == 'undefined' ? sha : dan;
(未经测试,希望它有效。:)无论如何,它应该给你一个想法)
Check here for documentation on logical operators
此外,这个问题可能会为您提供更多见解:Javascript || or operator with a undefinded variable
答案 1 :(得分:3)
var sha = 6;
var dan = null;
var secondParameter = dan || sha;
alert(secondParameter);
试试这个。您可以使用||
运算符合并,但必须声明所有变量才能被引用
答案 2 :(得分:1)
这用于以类似参数的方式给出但未赋值的情况,或falsy
falsy
为0, false, null or undefined
例如:
var sha = 6;
var dan = undefined;
var secondParameter = dan || sha;
alert(secondParameter);
您将获得6
使用它的一个很好的例子是这样的:
function funcWithCallback(callback){
callback = callback || function(){};
callback();
}
在此示例中,如果回调未定义(或falsy
),则将回调设置为函数的新实例
在这种情况下使用它将确保没有错误
答案 3 :(得分:1)
JavaScript处理未声明变量(未定义变量)和未定义值的方式有所不同。在下面的示例中,变量dan
已声明但从未设置,因此它的值为undefined
||返回它可以找到的第一个true
值,所以如果我传递的只是一个空字符串,0,false,NaN,undefined或NULL,它将控制传递的值。否则它将记录“默认值”。
function test(dan){
console.log(dan || "default value");
return dan===undefined;
}
console.log(test());//default value, then true
console.log(test(22));//22 then false
检查变量是否通过的更健壮的方法是查看变量的值是否未定义:
function test(dan){
dan = (typeof(dan)==='undefined')?"default value":dan;
}
在你的例子中,变量dan
根本没有被声明(变量是未定义的),这就是你得到错误“dan not not defined”的原因,因为dan根本没有声明。
function test(){
return dan===undefined;//ReferenceError: dan is not defined
}
console.log(test());
您可以将代码更改为:
var sha = 6, dan;//dan is declared here but no value is set
var secondParameter = dan || sha;
console.log(dan===undefined);//true
console.log(secondParameter);//6
如果你想检查某个对象是否有属性,那么它不会抛出错误:
function test(){
return window.neverSetOrDeclared===undefined;
}
console.log(test());//true
当您尝试检查undefined或null属性时会抛出错误:
null.something//throws error
undefined.something//throws error
window.neverSetOrDeclared===undefined//throws error
答案 4 :(得分:0)
说明:这个方式||工作原理是:如果第一个条件为假,则检查第二个条件。因此,为了显示第二个参数,您必须将第一个参数设为null。