Javascript 为什么typeof 1===1返回false而不是boolean
如果您查看操作数的类型,请访问网站 Def:操作数是表示对象或原语的表达式Javascript 为什么typeof 1===1返回false而不是boolean,javascript,Javascript,如果您查看操作数的类型,请访问网站 Def:操作数是表示对象或原语的表达式 我们知道1===1//返回true它是一种基本类型boolean和 typeof true//始终返回布尔值 但当我在代码下面运行时 console.log(typeof 1==1)由于运算符的优先级高于=: 第一个操作实际上是typeof 1,它返回一个“number” 下一个操作是“number”==1,返回false,因为显然字符串不是数字 如果要使其正常工作,请先使用括号处理比较(1==1),然后检查其类型
我们知道
1===1//返回true
它是一种基本类型boolean
和typeof true//始终返回布尔值
但当我在代码下面运行时
console.log(typeof 1==1)代码>由于运算符的优先级高于=
:
- 第一个操作实际上是
typeof 1
,它返回一个“number”
李>
- 下一个操作是
“number”==1,返回false,因为显然字符串不是数字
如果要使其正常工作,请先使用括号处理比较(1==1)
,然后检查其类型
console.log(typeof(1==1))
typeof
运算符的优先级高于==
,因此表达式typeof 1===1
被解释为(typeof 1)==1
:
typeof
操作符返回一个字符串(typeof 1)
计算结果为字符串“number”
- 由于明显的原因,
'number'==1
计算结果为false
看
作为另一个例子,通过类比,typeof1+1
会产生字符串'number1'
由于运算符优先级,表达式的计算结果为(typeof 1)==1
。这是不正确的
尝试使用
console.log(typeof (1 === 1));
您正在将
类型的字符串
与1
进行比较。这永远不会相等,因为1
是一个数字
。typeof的优先级高于comparison,因为==
是一个严格的值比较typeof 1
是“number”,因此您要严格比较字符串值“number”和数值1@Kinduser很抱歉,我这么做是因为Alex在修改答案之前首先回答了与运算符优先级有关的问题,Vincent只是为了澄清,“Javascript从左到右读取代码”这有点误导。正如其他答案所指出的,这与运算符优先级有关。显然,4+5*6
按预期返回34
,而不是54
。不,是运算符,就像+
或*
一样。恰好typeof
的优先级高于==
,因此首先执行它1===typeof 1
将表现出相同的行为。您可以查看MDN上的以说服自己。感谢您指出。。。。