96.重学js-delete操作符
2022-04-17 本文已影响0人
wo不是黄蓉
delete操作符
返回的结果表示删除表达式的结果是否成功。
let a = 10;console.log(delete a)//false
let a = {a:'a',b:'b'};console.log(delete a.a)//true
let a = 0;delete a;console.log(a) //0,0并没有从全局环境中删除掉,它可以理解为是全局对象中的一个属性,又因为delete删除的是表达式的结果,因此声明在全局变量中的a并不会被删掉
console.log((1+1)) //表达式加括号就相当于的执行表达式,返回表达式执行的结果,表达式的值称为“引用”。现在可以理解为什么delete 删除的也就是对表达式值得引用。
delete删除的是一个表达式-> delete expression
epression的计算结果是某个属性的引用。
js可以通过getValue
将引用转换为值,方便参与运算。(表达式的本质是求值运算)
为什么调用x可以知道是哪个对象调用的?
obj.x的引用返回的是一个函数,将obj传递给函数,就可以通过this来访问到obj。
obj.x()//返回一个关于x的引用,这个引用又作为下一个操作符的左手端(在程序中用左手端来表示是一个引用),()也是一个操作符,实际上它的调用对象就是x这个引用的返回结果
delete如果删除的是一个我们常说的值类型,其实删除的是值类型表达式的值,因此还是会返回值本身。
但是值类型相当于是存在于global对象中的一个属性,这么说起来其实值类型也属于引用类型。