“||”将值赋给变量时,运算符不起作用

时间:2013-06-25 01:50:38

标签: javascript

此代码有什么问题?

var sha = 6;
var secondParameter = dan || sha;
alert(secondParameter);

我尝试过很多浏览器。没有警报。 如果我像这样添加var dan:

var sha = 6;
var dan = 5;
var secondParameter = dan || sha;
alert(secondParameter);

警报将会发生。那么“||”中的问题。我看到许多代码使用这样的运算符!所以我不知道......

5 个答案:

答案 0 :(得分:7)

您没有定义dan。执行在该错误处停止。检查浏览器控制台是否有错误。

当您定义dan时,继续执行,但这可能不是您想要的。

JavaScript中此类代码的目的是说dan是否有假值(任何评估为false值的值,即0''nullfalseundefinedNaN),然后使用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

falsy0, 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。