啊?这……

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

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

9436 次点击
所在节点    JavaScript
69 条回复
ChanKc
2020-07-24 19:00:38 +08:00
@jinliming2 #14 啊,我知道基本数据类型什么的。但我觉得 String 还区分基本数据类型和,呃……你说的类。可是既然现实中根本没人真的会用 new String,为什么不就合成一个呢?
你看 BigInt 。BigInt(1)会产生一个新的 BigInt,Object.getPrototypeOf(BigInt(1))可以拿到它的原型。而 new BigInt 则会抛出异常,所以几乎永远都不会产生 x instanceof BigInt 为 true 的可能,除非你干下面这种事情
Object.create(Object.getPrototypeOf(BigInt(1))) instanceof BigInt
在做 BigInt 的时候我觉得 TC39 的人一定注意到了这个问题所以做得比 String 要好了一些。但是过去的事情,像楼主这样吐槽一下也是挺有乐趣的事情。
Java 的那帮人似乎确实有想过合二为一,Valhalla 好像就在做类似的事情
https://cr.openjdk.java.net/~briangoetz/valhalla/sov/02-object-model.html
ChanKc
2020-07-24 19:02:17 +08:00
@ChanKc 脑子短路,第二句是“但我觉得为什么 String 还要区分基本数据类型和,呃……你说的类呢?“
ChanKc
2020-07-24 19:02:38 +08:00
@ChanKc “但我想……”
DOLLOR
2020-07-24 20:16:20 +08:00
@ChanKc
当年被迫模仿 java 创造了 js,连糟粕也一起模仿来咯。明明有基本类型,还非要为面向对象而面向对象,搞什么乱七八糟的“包装类”。每次都得反反复复解释新人为什么 new 两个相同的 String 用==相比却得到 false 。现在看到 java 来写前端的,还偶尔看见在 js 里 new String 的,简直可笑。
robinlovemaggie
2020-07-24 22:02:44 +08:00
推荐看一下 Dan Abramov 的 justjavascript 课程,你需要一个重塑一下 mental model 来理解 JS
szzhiyang
2020-07-24 22:03:32 +08:00
@imnaive 不是瑕不掩瑜,是瑜不掩瑕。
wi
2020-07-25 10:07:16 +08:00
不会写标题就不要发帖
lovecy
2020-07-27 10:36:53 +08:00
@lovecy [doge][doge][doge]
@CEBBCAT 只是在玩梗,忘加狗头了[doge][doge][doge]
rproud
2020-08-03 18:22:47 +08:00
Object instanceof Function
// true
Function instanceof Object
// true
![] == []
// true
!new Boolean(false)
// false
😈

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

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

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

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

© 2021 V2EX