We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
本质上是检测 rval 原型链上的原型对象是否在 lval 原型链上。
ToPropertyKey 只是为了拿对象的键名,键名要么是Symbol,要么是string类型。
HasProperty 内部会调用 [[HasProperty]] 内置方法,该内置方法会继续调用 OrdinaryHasProperty 内部算法,该算法会查找 原型链 上是否存在该键名。
[[HasProperty]]
该抽象操作 InstanceofOperator实现了一种通用的算法,该方法通过咨询目标的 @@hasinstance 方法来判断ECMAScript值 V 是对象 target 的实例,如果 目标的 @@hasinstance 存在,判断 target 的 "prototype" 属性值是否在 V 的原型链上。
第4和第5步,步骤4和5提供了与ECMAScript以前版本的兼容性,以前版本未使用 @@hasInstance 方法来定义 instanceof 运算符语义。如果对象没有定义或继承 @@hasInstance,那么其将使用默认的 instanceof 语义
`${a}` == `${b}`
new String("a") == "a" // true "a" == new String("a") // true // 根据 == 算法,两边类型一致时会返回 === 的结果,所以这里是false new String("a") == new String("a") // false
字符串比较对代码单元值的序列使用简单的相等性测试。没有尝试使用更复杂的,面向语义的字符或字符串相等性定义以及Unicode规范中定义的顺序。因此,根据Unicode标准规范定义的相等的字符串值可以测试为不相等。实际上,该算法假定两个字符串都已经处于规范化形式。
昨晚临近下班时突然想手动实现下 instanceof,毕竟一直在调用人家的API,但是js基础貌似又不熟了,果然,尼玛,写错了,借助浏览器打印的背景下还要18分钟才写出来,真菜!!!
instanceof
The text was updated successfully, but these errors were encountered:
No branches or pull requests
关系运算符(我只列出instanceof和in) 和 相等运算符
instanceof
in
InstanceofOperator( V, target )
该抽象操作 InstanceofOperator实现了一种通用的算法,该方法通过咨询目标的 @@hasinstance 方法来判断ECMAScript值 V 是对象 target 的实例,如果 目标的 @@hasinstance 存在,判断 target 的 "prototype" 属性值是否在 V 的原型链上。
==
!=
===
!==
注意
2020-07-22 补充
昨晚临近下班时突然想手动实现下
instanceof
,毕竟一直在调用人家的API,但是js基础貌似又不熟了,果然,尼玛,写错了,借助浏览器打印的背景下还要18分钟才写出来,真菜!!!The text was updated successfully, but these errors were encountered: