0

这段代码有什么问题?

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

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

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

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

4

5 回答 5

7

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

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

JavaScript 中此类代码的目的是说明如果dan有一个假值(任何计算结果为值的false值,即0, '', null, false, undefined, 或NaN),则使用 的值sha

如果定义dan超出了您的责任,(即其他脚本应该设置它),那么您可以使用如下构造检查它的存在:

secondParameter = typeof(dan) == 'undefined' ? sha : dan;

(未经测试,希望它有效。:) 无论如何,它应该给你一个想法)

在此处查看有关逻辑运算符的文档

此外,这个问题可能会给你更多的洞察力:Javascript || 或带有未定义变量的运算符

于 2013-06-25T01:55:58.020 回答
3
var sha = 6;
var dan = null;
var secondParameter = dan || sha;
alert(secondParameter);

尝试这个。您可以使用||运算符合并,但必须声明所有变量才能被引用

于 2013-06-25T01:54:51.587 回答
1

JavaScript 处理未声明变量(未定义变量)和未定义值的方式有所不同。在以下示例中,变量dan已声明但从未设置,因此它的值是undefined|| 返回true它可以找到的第一个值,所以如果我传递除空字符串、0、false、NaN、未定义或 NULL 之外的任何内容,它将 console.log 传递的值。否则它将记录“默认值”。

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 is 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
于 2013-06-25T02:18:18.117 回答
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),则将回调设置为函数的新实例

在这种情况下使用它可以确保没有错误

于 2013-06-25T01:56:04.800 回答
0

解释:这种方式|| 工作原理是:如果第一个条件为假,则检查第二个条件。所以为了显示第二个参数,你必须让第一个参数为空。

于 2013-06-25T01:57:10.283 回答