啊?这……

2020-07-23 18:59:51 +08:00
 pabupa
"    " instanceof String; // False !!!!!!!!!!!!!!

你内部怎么实现的,跟我有社么关系呀?你不能让他保持一致吗?!

9436 次点击
所在节点    JavaScript
69 条回复
yanguango
2020-07-24 02:02:06 +08:00
Mutoo
2020-07-24 07:36:11 +08:00
可以自己写一个 instanceOf 来判断: 原理是追踪对象的 __proto__ 链,能否找到目标的原型。

" ".__proto__ === String.prototype // true;
Mutoo
2020-07-24 07:56:45 +08:00
lizz666
2020-07-24 08:35:53 +08:00
你左边的是普通字面量,又不是字面量对象,你要分清楚,字面量对象是指直接 `{}` 这种形式的,`" "` 这种只是普通字面量
你可以看看这个: https://github.com/lizhongzhen11/lizz-blog/issues/75#instanceof (结合规范和 MDN 理解下)
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 中相关内容
murmur
2020-07-24 08:42:55 +08:00
instanceof 我记得还有跨 iframe 的坑 ,所以判断 array 才会有那么复杂的写法
free9fw
2020-07-24 08:48:33 +08:00
String.prototype.constructor(" ") instanceof String 与 new String(" ") instanceof String
true 的区别
xingyuc
2020-07-24 09:38:10 +08:00
标题党先打死 hhh
xiaoyu8740
2020-07-24 09:44:52 +08:00
拜托 先好好学学基础
joesonw
2020-07-24 09:49:06 +08:00
@HiCode 数组和对象是指针比较, 肯定不一样啊. 你换哪个语言都不行啊.
ChanKc
2020-07-24 10:06:34 +08:00
JS 就是设计上有问题,为什么楼上那么多人不愿意承认?
Vegetable
2020-07-24 10:18:49 +08:00
这是不是弱类型造成的认知困难?
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
VDimos
2020-07-24 10:19:53 +08:00
一般都多种方法判断的,我一般用 Object.prototype.toString 来判断
ares586
2020-07-24 10:20:43 +08:00
每个语言都有不足。。JS 能兼容,不像 py2 -> py3 已经不错了
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() 万能的
imnaive
2020-07-24 11:49:38 +08:00
瑕不掩瑜,你就当是断臂维纳斯了。
HiCode
2020-07-24 12:07:35 +08:00
@joesonw 你没眼花吧?

第一个是[]

第二个也是[]

自己复制了去浏览器执行看看。
HiCode
2020-07-24 12:10:44 +08:00
@joesonw

php:

var_dump([] == []);

true

python:

[] == []

true

你都去试试!
MyouiSouth
2020-07-24 12:48:55 +08:00
js 设计上有问题和楼主使用错误不冲突啊,大家承认了 js 的设计问题楼主的" " instanceof String 也不会变成 true 呀,为啥纠正使用错误变成了不承认 js 的设计问题呢,我就算承认了我也没办法纠正 js 的设计问题啊,委屈哭了呜呜呜

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/692605

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX