javascript和(&&)运算符未按预期工作

时间:2018-03-29 23:20:39

标签: javascript

我需要检查字符串是否等于定义的值并且对象是否具有hash键。

我对此非常困惑:

var my_string = 'some_string';
var my_obj = {'hash':'4010f89a05c236cd4f3a5c7558af0e70dc4216454d2d5155a285bfbad752ce51f9510272821a254'}
console.log((my_string == 'some_string' && my_obj['hash']));

返回4010f89a05c236cd4f3a5c7558af0e70dc4216454d2d5155a285bfbad752ce51f9510272821a254

预期truefalse(在此示例中为预期true)。

5 个答案:

答案 0 :(得分:7)

它正常工作。

(my_string == 'some_string' && my_obj['hash'])等于"4010f89a05c236cd4f3a5c755...",这是真实的。例如,在if语句中用作条件就可以了。

您也可以将其转换为实际的布尔值:

!!(my_string == 'some_string' && my_obj['hash'])

答案 1 :(得分:4)

一种选择是使用in运算符检查对象中是否存在特定键。我更喜欢这种方法,因为JavaScript有一些非常糟糕的值被认为是假的,比如0

console.log((my_string == 'some_string' && ('hash' in my_obj)));

答案 2 :(得分:2)

&&操作员返回&&amp ;;右侧的任何内容。只要这两个值都是这样的:

const foo = 'foo';
const bar = 'bar';

const foobar = foo && bar;
console.log(foobar);

然后,返回的结果将作为if语句的结果强制转换为true。重要的是要意识到if语句将值强制转换为布尔值和&&声明没有。

答案 3 :(得分:1)

&安培;&安培;每次都不会返回布尔值。

当你使用&&如果两者都为true,则返回第二个值。 当你使用||如果两者都为真,则返回第一个值。

let one = "Cat" && "Dog"     
let zwo = "Cat" || "Apple"   
一个人回来了。两人返回Cat

答案 4 :(得分:1)

您可以使用三元操作并使其返回true或false。

像这样:

console.log(   (my_string == 'some_string' && my_obj['hash'])   ? true : false );

更多信息: