Javascript - 比较没有类型转换为布尔值

时间:2011-08-12 15:58:43

标签: javascript

在其他语言中,我有两组运算符,or||,它们的类型不同。 Javascript是否有一组运算符来比较和返回原始对象,而不是布尔值?

我希望能够使用var foo = bar.name or bar.title

之类的单一语句返回定义的任何值

5 个答案:

答案 0 :(得分:6)

只有一组布尔运算符(||&&),他们已经这样做了。

var bar = {
    name: "",
    title: "foo"
};

var foo = bar.name || bar.title;

alert(foo); // alerts 'title'

当然,你必须牢记which values evaluate to false

答案 1 :(得分:2)

var foo = (bar.name != undefined) ? bar.name : 
          ((bar.title != undefined) ? bar.title : 'error');

答案 2 :(得分:2)

var foo = bar.name || bar.title;

它返回第一个定义的对象。

如果两者都不定义,则返回undefined

答案 3 :(得分:1)

我要么完全不理解这个问题,要么就像你提到的那样直截了当:

var foo = bar.name || bar.title;

如果bar.name包含任何 truthy 值,则会将其分配到foo,否则会分配bar.title

例如:

var bar = {
    name: null,
    title: 'Foobar'
};

var foo = bar.name || bar.title
console.log( foo ); // 'Foobar'

答案 4 :(得分:1)

Javascript的行为完全符合您的要求:

var a = [1, 2],
    b = [3, 4];

console.log(a || b); //will output [1, 2]
a = 0;
console.log(a || b); //will outout [3, 4]

如果要将类型转换为布尔值,可以使用双向运算符:

console.log(!![1, 2]); //will output true
console.log(!!0); //will output false