typeof 2+4 的输出是什么?
之前了解的一些JS的运算符优先级大概仅涉及逻辑与或非、加减乘除、数值比较这类基础的运算符,而且也能满足开发中中的使用场景。最近遇到一道 JS基础测试题,因为对运算符优先级没有详细去整理过,果然一秒翻车

先看看原题
console.log(typeof 3+4)
输出是什么?
// 3 + 4 = 7
// typeof 7 => "number"
一秒解答,展示了对自己心算速度及熟练JS类型判断的的自信
实际上
console.log(typeof 3+4)
// "number4"

不够机灵(既然是题,肯定不是这种正常逻辑得出的答案,但投机取巧不可取)是一部分,但归根结底因为还是没有去完整的看过运算符优先级相关的文档(或者,看过,忘记了?)。话不多说,赶紧去MDN找找对应的文档。

顺手挑几个开发注意的比较少的,搞几个例子
- new 操作符(有参数、无参数)
new的用法就不说了,这里有一个区别就是无参数和有参数优先级不同
function Jonas(cat,dog){ console.log('cat:',cat) this.cat = cat this.getDog = function (){ return 'dog: not found' } }console.log(new Jonas) // output: cat: undefined // output: Jonas { cat: undefined, getDog: f } console.log( new Jonas().getDog() ) // output: cat: tauntuan // output: dog: not found console.log( new Jonas.getDog() ) // output:Jonas.getDog is not a constructor
- 可选操作符(怎么之前没听过?)
可选链操作符 ?. 可以按照操作符之前的属性是否有效,链式读取对象的属性或者使整个对象链返回 undefined。?. 运算符的作用与 . 运算符类似,不同之处在于,如果对象链上的引用是 nullish (null 或者 undefined),. 操作符会抛出一个错误,而 ?. 操作符则会按照短路计算的方式进行处理,返回 undefined。可选链操作符也可用于函数调用,如果操作符前的函数不存在,也将会返回 undefined。
使用场景:当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明。在探索一个对象的内容时,如果不能确定哪些属性必定存在,可选链操作符也是很有帮助的。
测试一下
const jonas = {
name: 'Jonas',
cat: {
name: 'tuantuan'
}
}
const dog = jonas.dog
console.log(dog);
// output: undefined
const dogName1 = jonas.dog?.name
console.log(dogName1)
// output: undefined
const dogName = jonas.dog.name
console.log(dogName);
// output: Cannot read property 'name' of undefined
(兼容性可能并没有那么好,移动端火狐和欧朋不支持该运算符)
- 从右到左的关联性
幂运算 **
console.log( 2 ** 3 ** 2 )
// output: 512
typeof
typeof typeof 2+4
//output: "string4"