js执行优先级 + 测试题

Posted by CodingWithAlice on March 10, 2025

js执行优先级 + 测试题

参考链接:mdn 优先级操作符

执行优先级由高到低:

19 优先级

  • 分组:(…)

18 优先级

  • 成员访问 a.b

    • 需计算的成员访问 a[b]
    • new 带参数列表 new foo()
    • 函数调用 fun(a)
    • 可选链 a?.b

17 优先级

  • new 无参数列表 new foo

小括号(xxx) > 属性访问. > new foo() 带参数 > 函数调用foo() > new foo 无参数

function getName(){ console.log(1) }
function Foo() {
    this.getName = function () { console.log(2) }
    return this;
}
Foo.getName = function () { console.log(3) }

var a = new Foo.getName(); 
// 该行等于 new (Foo.getName)(),3
// 先 Foo.getName - 再 new (Foo.getName)(),将 Foo.getName 作为构造函数,打印3 - a={}
var b = new Foo().getName(); 
// .属性调用优先级比 new 构造函数() 高,所以该行等于(new Foo()).getName(),打印 2
// 先 new Foo(),Foo 是构造函数,创建新对象 - 再调用该对象的 getName 执行 - b 为 undefined
var c = new new Foo().getName(); 
// 该行等于new (new Foo().getName)(),2
// 先 new Foo(),创建新对象 - 再获取该对象的getName - new调用这个 getName 创建一个新对象赋值给 c={}

//再举个栗子
new Date().getTime(); // 等于((new Date()).getTime)()
(new Date).getTime(); // 等于((new Date()).getTime)()
new Date.getTime(); // 等于new (Date.getTime)() - Uncaught TypeError: Date(...).getTime is not a function;

####