为了账号安全,请及时绑定邮箱和手机立即绑定

JS类型判断

JS类型判断

慕田峪4524236 2019-03-07 18:19:10
问题: 对 instanceof 的疑惑根据MDN关于 instanceof 的描述:object instanceof constructorinstanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。关于字面量字符串不能理解为什么不是String的实例。MDN有这样的例子:var simpleStr = "This is a simple string"; var myString  = new String();var newStr    = new String("String created with constructor");simpleStr instanceof String; // returns false, 检查原型链会找到 undefinedmyString  instanceof String; // returns truenewStr    instanceof String; // returns truemyString  instanceof Object; // returns true不太理解这里的检查原型链会找到undefined我自己测试的时候发现const s = "abcdefg";s instanceof String; // falses.__proto__ === String.prototype; // true这里字面量字符串的原型链不是有String.prototype吗,那么为什么字面量字符串却不是String的实例?另外,这是我看到别人写的 instanceoffunction instance_of(L, R) {//L 表示左表达式,R 表示右表达式 var O = R.prototype;// 取 R 的显示原型 L = L.__proto__;// 取 L 的隐式原型 while (true) {    if (L === null)      return false;    if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true      return true;    L = L.__proto__;  } }const s = "abc";instance_of(s, String); // true这个实现,得到的字面量字符串是String的实例,那么实现上是哪里出了问题?
查看完整描述

4 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

object instanceof constructor
参数
object
要检测的对象.
constructor
某个构造函数

我猜是右边参数为构造函数,如果给字面字符串,又不是构造函数类型,你左边怎么给,都会为FALSH吧。


查看完整回答
反对 回复 2019-03-18
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

判断类型的话toString支持更多选择

(没测试:全凭感觉)
另外在JS中貌似只有对象才存在原型吧,String是一个全局的对象,而你自己创建的字面量是没有原型的。


查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 682 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号