" " instanceof String; // False !!!!!!!!!!!!!!
你内部怎么实现的,跟我有社么关系呀?你不能让他保持一致吗?!
#python isinstance(" ", str) # True
# ruby puts " ".instance_of?(String) ; # True
1 GM 2020-07-23 19:07:05 +08:00 不能。 爱用不用,不用就滚~~~~~ |
![]() | 2 Touchevent 2020-07-23 19:09:10 +08:00 暴躁老哥。。 |
![]() | 3 wellsc 2020-07-23 19:11:22 +08:00 via iPhone Js 三元一体.jpg |
4 DoodleSit 2020-07-23 19:12:28 +08:00 typeof 不香吗~~ instanceof 代表是实例的意思,前提是要实例化( new ) |
![]() | 5 yongjing 2020-07-23 19:13:33 +08:00 RTFM instanceof 只校验对象 |
![]() | 7 pabupa OP @yongjing @DoodleSit https://developer.mozilla.org/zh-CN/docs/Web/Javascript/Reference/Operators/Object_initializer "可以通过 new Object(),Object.create()方法,或者******使用字面量标记(初始化标记)初始化对象******。" |
![]() | 8 ViggoSite 2020-07-23 21:14:48 +08:00 typeof 不香吗~~ |
![]() | 10 MintZX 2020-07-23 21:29:52 +08:00 via iPhone 我没理解,这有什么问题? 前者是模版字符,后者是对象。当然不是一个东西。 python 和 ruby 是一个类那就是 True,js 不是一个类那就不是 true 。你想比较的话用 new String()好了。 |
11 morethansean 2020-07-23 21:30:05 +08:00 @ViggoSite 你引用的这篇文章里不是写了嘛, ```An object initializer is a comma-delimited list of zero or more pairs of property names and associated values of an object, enclosed in curly braces ({}).``` string literal 并不是 object, instanceof 会返回 false. |
![]() | 13 ViggoSite 2020-07-23 21:32:38 +08:00 @morethansean @错了(⊙_⊙;)… |
14 jinliming2 2020-07-23 21:36:34 +08:00 ![]() String 是类,你可以 new String "" 是 string,基本数据类型之一,不是 object 既然连 object 都不是,怎么可能 instanceof ? "" !== new String(""),因为数据类型不一样,一个是 string,一个是 object 。 顺便,@pabupa #7,你能把那一段复制完吗? 可以通过 new Object(),Object.create()方法,或者使用字面量标记**(初始化标记)**初始化对象。 **一个对象初始化器,由花括号 /大括号 ({}) 包含的一个由零个或多个对象属性名和其关联值组成的一个逗号分隔的列表构成**。 所以,只有 {} 出来的才是对象! |
![]() | 15 hirasawayui 2020-07-23 21:56:37 +08:00 new String(" are you ok? ") instanceof String // true |
16 Q4h7388nR28s95fa 2020-07-23 22:26:42 +08:00 [] == [] false |
17 pigmen 2020-07-23 22:30:30 +08:00 这个真不怪 js,是你用错了 |
18 watanuki 2020-07-23 22:30:44 +08:00 搜索 wtfjs 有惊喜 |
![]() | 19 yujiff 2020-07-23 22:41:25 +08:00 我爱 V2,高人多且直接、热心! |
![]() | 20 mmnsghgn 2020-07-23 23:07:12 +08:00 new String(" ") instanceof String; |
![]() | 21 yanguango 2020-07-24 02:02:06 +08:00 ![]() |
![]() | 22 Mutoo 2020-07-24 07:36:11 +08:00 可以自己写一个 instanceOf 来判断: 原理是追踪对象的 __proto__ 链,能否找到目标的原型。 " ".__proto__ === String.prototype // true; |
![]() | 23 Mutoo 2020-07-24 07:56:45 +08:00 |
![]() | 24 lizz666 2020-07-24 08:35:53 +08:00 你左边的是普通字面量,又不是字面量对象,你要分清楚,字面量对象是指直接 `{}` 这种形式的,`" "` 这种只是普通字面量 你可以看看这个: https://github.com/lizhongzhen11/lizz-blog/issues/75#instanceof (结合规范和 MDN 理解下) |
![]() | 25 lizz666 2020-07-24 08:38:14 +08:00 另外关于 instanceof 设计历史,你可以看 https://github.com/doodlewind/js-20-years-cn/blob/master/part-2.md#%E5%AE%9A%E4%B9%89-ecmascript-3 中相关内容 |
![]() | 26 murmur 2020-07-24 08:42:55 +08:00 instanceof 我记得还有跨 iframe 的坑 ,所以判断 array 才会有那么复杂的写法 |
![]() | 27 free9fw 2020-07-24 08:48:33 +08:00 String.prototype.constructor(" ") instanceof String 与 new String(" ") instanceof String true 的区别 |
![]() | 28 xingyuc 2020-07-24 09:38:10 +08:00 标题党先打死 hhh |
29 xiaoyu8740 2020-07-24 09:44:52 +08:00 拜托 先好好学学基础 |
31 ChanKc 2020-07-24 10:06:34 +08:00 via Android ![]() JS 就是设计上有问题,为什么楼上那么多人不愿意承认? |
![]() | 32 Vegetable 2020-07-24 10:18:49 +08:00 这是不是弱类型造成的认知困难? |
33 faceRollingKB 2020-07-24 10:18:51 +08:00 确实有这种问题,你需要使用 object wrapper 做一下装箱:Object(' ') instanceof String // true https://developer.mozilla.org/en-US/docs/Web/Javascript/Reference/Global_Objects/Object/Object |
34 VDimos 2020-07-24 10:19:53 +08:00 via Android 一般都多种方法判断的,我一般用 Object.prototype.toString 来判断 |
![]() | 35 ares586 2020-07-24 10:20:43 +08:00 每个语言都有不足。。JS 能兼容,不像 py2 -> py3 已经不错了 |
36 vivipure 2020-07-24 10:59:16 +08:00 new String(' ') instanceof String. // true ' ' instanceof String // false ' '.__proto__.contrucotr // undefined new String(' ').__proto__.constructor // String() ------------ 你直接声明的字符串是基本类型,不是通过实例生成的对象 所以 instanceof 没用 建议 Object.prototype.toString.call() 万能的 |
![]() | 37 imnaive 2020-07-24 11:49:38 +08:00 瑕不掩瑜,你就当是断臂维纳斯了。 |
38 Q4h7388nR28s95fa 2020-07-24 12:07:35 +08:00 |
39 Q4h7388nR28s95fa 2020-07-24 12:10:44 +08:00 |
![]() | 40 MyouiSouth 2020-07-24 12:48:55 +08:00 js 设计上有问题和楼主使用错误不冲突啊,大家承认了 js 的设计问题楼主的" " instanceof String 也不会变成 true 呀,为啥纠正使用错误变成了不承认 js 的设计问题呢,我就算承认了我也没办法纠正 js 的设计问题啊,委屈哭了呜呜呜 |
41 ChanKc 2020-07-24 13:01:29 +08:00 via Android ![]() @
|