输入
[false, Boolean(false), [], [[]], "", String(""), 0, Number(0), "0", String("0"), [0]].map(x => null >= x && null <= x && null !== x)
输出
[true, true, true, true, true, true, true, true, true, true, true]
一个会在这么多情况下出现逻辑悖论的语言,是个好语言~
所以再怎么发展 ES6, ES2015, ES2017... 都是徒劳的...
只能希望 wasm 快点推进,革了 JS 的命...
1
oxyFired 2017-05-23 13:25:11 +08:00 via Android 2
sx,你不知道 js 里<=和>=的原理就在这里乱喷
|
2
hudotio 2017-05-23 13:26:00 +08:00
固然有槽点,但是 JS 也不是在努力变好么。。。
|
3
xilixjd 2017-05-23 13:31:34 +08:00
js 的坏处就在于这些语言的缺陷增加了学习成本
|
4
jtsai 2017-05-23 13:31:47 +08:00 2
我抽过烟、打过架、堕过胎,但我觉得我还是一个好女孩
|
5
fds 2017-05-23 13:32:50 +08:00
本来定义就不是有序的呀,谈不上悖论
|
6
Presbyter 2017-05-23 13:35:00 +08:00
楼主需要理解一下 Boolean
http://www.w3school.com.cn/js/js_obj_boolean.asp |
7
Mitt 2017-05-23 13:38:48 +08:00
这是每个语言间的定义问题,想知道为什么会发生这种事情就要去看原理了,js 确实有些时候蛋疼,不过我感觉 js 是所有语言中最神奇的
|
8
moxhuis 2017-05-23 13:39:30 +08:00
6 年前端 XD
|
9
momocraft 2017-05-23 13:42:42 +08:00
一个通用语言中的所有值不太可能构成偏序,拿这个黑有点牵强了。
|
10
otakustay 2017-05-23 13:57:47 +08:00 3
都 2017 年了,你的眼里还是没有类型这个东西,还是拿着完全不同类型的东西去做不应该做的运算
是的 js 有历史包袱所以有一些边界情况下会有问题,但是 2017 年了同学,2017 年的软件工程里你去踩这些边界条件还能说出来当炫耀吗? |
11
Mitt 2017-05-23 14:00:02 +08:00
|
12
yoa1q7y 2017-05-23 14:09:17 +08:00
这怎么算作是悖论,你故意这么写,结果都是符合当初的语言设计标准的
其他语言不也一样么 |
13
popu111 2017-05-23 14:14:03 +08:00 via Android
第一二个是 true ??? excuse me ?
|
14
ck65 2017-05-23 14:22:20 +08:00 via iPhone
我学习并用 JS 的种种「不对」拿薪水,你花掉时间研究它又是来做什么呢?
|
15
plqws 2017-05-23 14:23:47 +08:00 via iPhone
这么说的话,看来世界上所有脚本语言都没有存在的意义了
|
16
buckyRRRR 2017-05-23 14:25:42 +08:00 1
缺陷被放大也都是被面试题害的,正常工作里这些东西会给你带来麻烦,知道问题规避不可以吗
|
17
demo 2017-05-23 14:50:14 +08:00
楼主不知道原因吗?非严格相等比较的时候会进行类型转换,比如:
[false, Boolean(false), [], [[]], "", String(""), 0, Number(0), "0", String("0"), [0]].map(x => Number(x)) // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Number(null) // 0 这样 “ null >= x && null <= x ” 就是 “ 0 >= 0 && 0 <= 0 ”,而 null 和 0 是 2 个不同的类型,所有不全等。 楼主可以看看: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness |
18
SakuraKuma 2017-05-23 14:55:45 +08:00
感觉是被面试题气疯了的。(
|
19
gongbaodd 2017-05-23 15:00:51 +08:00
泥萌不要这么说 jj,泥萌知道 jj 有多努力么
|
20
gouflv 2017-05-23 15:27:34 +08:00
5 年前端 233, 有这时间学什么不好
|
21
Exin 2017-05-23 15:32:16 +08:00
噗嗤
|
22
exoticknight 2017-05-23 15:35:36 +08:00
@gouflv 噗嗤
|
23
Phariel 2017-05-23 15:49:09 +08:00 via Android
自认为比制定规则者聪明系列
|
24
rozbo 2017-05-23 15:50:23 +08:00
我是个好女孩,你们应该珍惜。
|
28
Artists 2017-05-23 16:01:36 +08:00
似乎自然语言才能勉强算是个好语言?
|
29
royzxq 2017-05-23 16:05:18 +08:00
连喷点都找不到么, 我帮你找一个好吧 2.1 / 0.3
|
30
Arrowing 2017-05-23 16:05:28 +08:00
我觉得没什么好讨论的,喜欢就多用点,不喜欢就少用点
但是,你能不用吗? |
33
royzxq 2017-05-23 16:12:33 +08:00 1
```
<?php echo null >= false && null <= false && null !== false; ``` try it |
35
jtsai 2017-05-23 16:31:39 +08:00
题主别噗,我挺喜欢 js 的,写起来挺嗨的
|
36
solee 2017-05-23 16:41:47 +08:00
我就呵呵一下
|
37
tyfulcrum 2017-05-23 16:55:52 +08:00 17
|
39
zoffy 2017-05-23 17:17:28 +08:00
js 的 literal 表达式还是 hin 方便的
|
40
prccn 2017-05-23 17:20:14 +08:00 4
1. 希望看完 ES6 ES2016 和 ES2017 的草案再说话;
2. 不管你是使用什么语言的开发者,这种妄言让你显得都很 low ; 3. 看到大家都在给你普及 js 基础就放心了; 4. 忠告:以后发这种帖记得贴上 github 账号 |
41
enenaaa 2017-05-23 17:33:09 +08:00
谁来告诉我, 为啥有 undefined 还要 null, 有了 null 还要 undefined。
|
42
iugo 2017-05-23 17:42:01 +08:00
说的别的:
我记得之前看 "漫画家" 的文章说 WebAssembly 是为了解决性能问题, 不是为了革 JS 的命. |
47
qdwang OP @Artists 当然不是,自然语言那么多歧义,是非常不好的编程语言。好的编程语言最起码需要有 well defined type system
|
48
chairuosen 2017-05-23 18:05:27 +08:00
@enenaaa null 是有语意的空,undefined 是没语意的
|
49
sirm2z 2017-05-23 18:08:02 +08:00
我觉得淘汰不可能,浏览器是个特殊的环境,它需要保持向前兼容,不可能有技术革新,就瘫痪掉一批网站。
用户才是王道,浏览器有这么多,只要不是同时全部抛弃了旧的网站,这门语言就有生存的必要 |
51
windfarer 2017-05-23 18:10:03 +08:00
|
52
sirm2z 2017-05-23 18:24:27 +08:00
@qdwang #50 其实根据现在开发人员的技术水平,我觉的重新整出一套新的语言,并且优于 js 是很容易的
但是比较一下推广成本,开发人员的接受率,大厂的使用率,这样看来基本上是一个出力不讨好的事情 只能说淘汰 js 很难,它的势头很猛,这是不能否认的,亲爹干爹也多,大家都乐于去在它基础上完善(填坑) 我想是有一定道理的,浏览器( js 的运行环境)毕竟有多家,他们本身就在博弈 我觉得要他们再兼容新的语言的运行环境,不是易事 |
53
Clarencep 2017-05-23 18:37:56 +08:00
所以说坐等 webassembly 普及,然后各种语言都可以编译成 webassembly 跑在浏览器里面。。。
|
54
qdwang OP @sirm2z
我觉得不需要造一个新的语言,基于现有高质量的好的语言编译到 wasm 就可以了。 推广肯定是该这些社区自行推广的,成本不高。 淘汰 js,要从下一代程序员开始。就像现在入门的人,可以直接用 typescript 一样。再下一代的前端程序员,可以直接用其他更好的语言来开发网页程序。 |
56
lxy 2017-05-23 18:59:14 +08:00
弱类型以及隐式转换,js 里很多这种反直觉的东西。
很多人眼里,可解释 == 可接受,类似于 It's not a bug, it's a feature 的说法。 问题的关键是用户是否需要这种 “ feature ”? |
57
buseni 2017-05-23 19:13:35 +08:00
JS 真是第一大语言
|
58
sirm2z 2017-05-23 19:29:06 +08:00
@qdwang 我查了下,目前只有一种方式能调用 wasm 里提供的接口,就是用 javascript !
所以我觉得 WebAssembly 更适合用于写模块,承接各种复杂的计算 如图像处理、3D 运算、语音识别、视音频编码解码这种工作,主体程序还是要用 javascript 来写的 |
59
fzhw88 2017-05-23 19:32:45 +08:00
这些都是语言的规范里面明确写着的,强制类型转化的规则……你那每一项转成数字都是 0,这有什么好喷的,每种语言都会有它自己的规范。
|
60
fzhw88 2017-05-23 19:34:15 +08:00
[[0]],还是 0
|
61
kimown 2017-05-23 19:37:13 +08:00 via Android 2
这东西没用的,如果项目里面有人写这样的代码,肯定拉他过去批一顿,写代码是要抱有一种用最简单,别人一看就懂的思路去写,写复杂的代码太简单了,但是要写出别人一看就懂的代码,那就是改改改,重构重构再重构
|
63
visonme 2017-05-23 19:49:59 +08:00
如果觉得 js 不好可以选择 ts,作为 MS 深度用户,我也是很提倡永 TS 的,但是我大多数的工作还是用 js ( nodejs )完成了。
对 WebAssembly 接触不深,不敢说太多,但在有限的接触中,我对 WebAssembly 的理解是,强壮 JS 而不是为了革 js 的命,不知道楼主是否认同我这个观点? 所以说让 wasm 革命 js 是不是有点太直觉化了。 |
64
maomaomao001 2017-05-23 20:09:35 +08:00 via Android
能不能找一个,实际使用过程中的,不如别的语言的点来黑,你这样黑点都找不到乱黑,你觉得合适吗????
|
65
Jeter 2017-05-23 20:11:52 +08:00
@yoa1q7y 没错,楼主应该去学学 C/C++(都是强类型语言),然后玩一玩这两门语言的类型提升或者截断转换,指针间的互相转换,直到它的 C/C++代码 core dump 到楼主吹胡子瞪眼睛之后才会想起 js 有多友好。。。
|
66
blahgeek 2017-05-23 20:50:45 +08:00
[0, 1, -2, -1].sort()
|
67
Em5O7B1JGfjQnBry 2017-05-23 21:36:39 +08:00 via Android
@Jeter 你看看 JavaScript 是什么时候诞生的,C 又是什么年代诞生的,再去看看 BS 为什么需要 C++要兼容 c 的那些东西,以及为什么有时候这些底层的东西为什么会这样,你这样举例完全就是扯淡,还有强弱类型这个概念有点乱,从类型系统的角度来说,C/C++不是强类型应该比较合适
|
68
guokeke 2017-05-23 22:41:31 +08:00
某天,v2 上又出现了 ‘ WebAssembly 是个好...云云’
|
70
darklowly 2017-05-23 23:01:51 +08:00 1
|
72
chunqiuyiyu 2017-05-23 23:51:40 +08:00
我越来越喜欢 JavaScript 了,尤其是现在的 ES6 语法,写起来太爽了
|
73
Jeter 2017-05-23 23:58:03 +08:00
@darklowly 好吧,我没说明白,我是想说,C/C++在使用时总是会碰到隐式转换的问题,而且因为它直接操作内存,很多问题 core dump 解决后还需要重新编译构建,对于前端这种需要快速开发的场景很不友好。。而楼主他试图通过“ well defined type system ”的语言编译成 wasm,去避免他帖子里提到的 JS 语言设计问题(然而这些值转换都已经成为标准了),而 C/C++只是我举的一个 [不适合前端] 这个开发场景的例子,来反驳楼主的上述观点。。。确实,JS 的值转换相对很多语言相当 SB (但是已经写入标准了),所以,如果没有能力去改变 JS 这种窘状的话,就去把标准看清楚再来讨论。。。
|
74
WENLIANG29 2017-05-24 06:00:07 +08:00
老铁,发这种引战帖没什么意思。JS 固然有很多历史上语言设计的弊端,它也有它的优势,况且语言设计也在慢慢变好。PHP 不也总有人骂么,PHP7 和 PHP-JIT 带来的提升也很大。你总揪着历史缺点不放没意思,而且还是这种老掉牙的喷法。有空不如多写几行代码 -。- (建议你去看一下 Mozilla 核心工程师 Lin Clark 的这篇文章再来说什么 WASM 淘汰 JS 的事 https://hacks.mozilla.org/2017/02/a-cartoon-intro-to-webassembly/) DOM、BOM、Accessibility 等等都是问题。
|
75
Ahri 2017-05-24 07:38:45 +08:00
Java 程序员都是好程序员(滑稽
|
78
sagaxu 2017-05-24 08:53:25 +08:00
语法丑陋没关系,反正不写原生 js,我都是用其它语言写了编译成 js 用
|
79
enenaaa 2017-05-24 09:16:29 +08:00
@chairuosen 空不就是未定义么。java 也有 null, 其他语言还有 nil, None, nullptr,叫啥都行。 但谁特么搞两个,神经病啊。
|
80
chenyu0532 2017-05-24 09:16:56 +08:00
笑看楼主被喷、、
|
81
caniuse 2017-05-24 09:17:26 +08:00
JavaScript 是最好的语言
|
82
jlyybz 2017-05-24 09:19:28 +08:00
我觉得 js 真不错 ~
|
83
chairuosen 2017-05-24 09:30:51 +08:00
@enenaaa 明确的告诉你没有,和没告诉你有没有,一样么?
|
84
awesomes 2017-05-24 09:31:26 +08:00
人家 JS 之父都说了,wasm 是让 JS 更强,不是取代 JS,你想太多了
|
86
lijsh 2017-05-24 09:49:10 +08:00
2017 年了还有人在搞这种无谓的语言鄙视,用的还是平时很难遇到的 edge case,楼主有空干点啥不好。
|
88
solidsnake 2017-05-24 09:49:54 +08:00 via iPhone
你也挺滑稽的
|
90
ajan 2017-05-24 09:55:37 +08:00
楼主自己来造一种语言吧! 我看好你
|
91
gjerryfe 2017-05-24 10:01:15 +08:00 via iPhone 1
楼主提出一个问题,楼上各位开始各种人身攻击,可见各位的自尊心 成熟感已经负值
|
92
issues 2017-05-24 10:01:51 +08:00
js 的框架能影响语言本身<逃
|
93
MushishiXian 2017-05-24 10:06:32 +08:00
还在鄙视语言的人到底有多 low......又不是没有往好的方向发展,与其去鄙视,还不如先提高自己水平吧
|
94
yanzixuan 2017-05-24 10:07:41 +08:00
在 js 基础上搞得 es 虽然是补漏洞,但是新人上手就有点郁闷了,不能知其然不知其所以然。。
|
95
wly19960911 2017-05-24 10:23:10 +08:00 via Android
就这就叫缺点?
+[] 看看结果是什么。说实话揪着语言这些问题不放不太好。平常没人用这种写法,感觉就是面试笔试题刁难人,有谁敢写这种估计已经被打死了 |
96
Halomaple 2017-05-24 10:53:23 +08:00
谁告诉你 Boolean(false) 结果是 true 了? Boolean('false') 和 Boolean(false)都分不清楚就来引战?
|
98
topgrd 2017-05-24 10:58:18 +08:00
WebAssembly 是不会革了 JS 的命的,之后的发展更可能是两者各用于擅长的地方,在 web 中两者同时存在,虽然 JavaScript 槽点很多,但不是正在向好的方向发展么?
|
99
Halomaple 2017-05-24 11:01:13 +08:00
|
100
learnshare 2017-05-24 11:08:05 +08:00
我现在更推荐直接上 TypeScript,忘掉 JavaScript
|