【发布时间】:2012-06-28 18:06:19
【问题描述】:
这对我来说没有意义,但我有一种感觉,我看到了一个使用这个的代码:
var abc = def || ghi;
我的问题是,这有效吗?我们可以在变量声明中添加条件吗?我想答案是否定的,但我有一个想法,我曾经在代码中看到过类似的东西。
【问题讨论】:
标签: javascript variables declaration
这对我来说没有意义,但我有一种感觉,我看到了一个使用这个的代码:
var abc = def || ghi;
我的问题是,这有效吗?我们可以在变量声明中添加条件吗?我想答案是否定的,但我有一个想法,我曾经在代码中看到过类似的东西。
【问题讨论】:
标签: javascript variables declaration
这给abc 提供def 的值,如果它不是假的(即不是false、null、undefined、0 或一个空字符串),或者@ 的值987654327@如果没有。
这相当于:
var abc;
if (def) abc = def;
else abc = ghi;
这通常用于选项:
function myfunc (opts) {
var mything = opts.mything || "aaa";
}
如果您调用myfunc({mything:"bbb"}),它会使用您提供的值。如果您什么都不提供,它将使用"aaa"。
在这种情况下,为了让调用者完全跳过参数,我们也可以用
来启动函数opts = opts || {};
【讨论】:
def 计算结果为真”可能更准确,因为如果是 0、空字符串、false 等,那么 abc 将获得 ghi 的值。
代码变量abc = def || ghi;
和
是一样的if (def) { //where def is a truthy value
var abc = def;
} else {
abc = ghi;
}
你想要一个像 if 语句这样的条件吗?
if (xxx==="apple") {
var abc = def;
} else {
abc = ghi;
}
写成三元运算符是:
var abc = (xxx==="apple") ? def : ghi;
【讨论】:
def 在您的第一个示例中为假,abc 也不是全局的。我说的对吗?
abc 可以是全局的,这取决于它的定义位置。
可以,可以在变量声明中添加条件
你可以这样使用,
function greet(person) {
var name = person || 'anonymouse';
alert('Hello ' + name);
}
greet('jashwant');
greet();
【讨论】:
好吧,看,这有点像,你要么检查一个是否为真。真实的将被退回。 :)
var abc = def || ghi;
相当于:
var abc = return (def == true) or (ghi == true)
【讨论】:
def 和ghi 是布尔值的情况下。在所有情况下,abc 将假定 ghi 的值(无论该值是什么)除非 def 评估为 true。如果def 是“hello”,那么 abc 将是“hello”(不是 booelan)。如果def 是假/空/零/未定义/等等,并且ghi 是“世界”,那么abc 将是“世界”(同样,不是布尔值)。