LHS和RHS在JavaScript中的怎么理解
前言:
对于lhs和rhs,从字面意思来说是 left hand side和 right hand side即左手边和右手边,一般可以理解为赋值操作的左侧和右侧,然而不能片面的用=号左边还说右边去判断是lhs还是rhs通俗的理解,
lhs是赋值操作即可以看做是在往内存中存储值,而rhs是取值操作,它是从内存中进行检索。事实上赋值操作还有其他几种形式,因此在概念上最好将其理解为“赋值操作的目标是谁(lhs)”以及“谁是赋值操作的源头(rhs)”。
进一步理解
这两种不同的引用方式对没有声明的变量的处理方式上是不同的,而这个不同之处对于我们编写代码和分析js引擎报错是很有益处的。 当对一个变量执行rhs查询时,如果遍历该变量所在处的词法作用域未能找到这个变量,js引擎就会抛出 referenceerror错误如果成功查询到了这个变量,但是对这个变量执行不合理操作,比如对一个非数组的变量执行下标取值,js引擎就会抛出 typeerror错误,甚至跟你说这个操作对应的只能是数组。当对一个变量执行
lhs查询时,同样在遍历作用域后无法找到该变量,在非es5的严格模式下,系统就会自动在全局作用域中创建一个同名变量,并将引用转移到该新建的全局变量中。而在es5的严格模式下,lhs查询失败时js引擎会抛出一个同rhs一样的 referenceerror 错误。