推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
qdwang

JavaScript 是个好语言 (滑稽

  •  
  •   qdwang · May 23, 2017 · 12170 views
    This topic created in 3453 days ago, the information mentioned may be changed or developed.
    输入
    [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 的命...

    109 replies  •  2017-06-01 11:01:47 +08:00
    1  2  
    ❮ ❯
    oxyFired
    oxyFired
    May 23, 2017 via Android❤️2
    1
    sx,你不知道 js 里<=和>=的原理就在这里乱喷
    hudotio
    hudotio
    May 23, 2017
    2
    固然有槽点,但是 JS 也不是在努力变好么。。。
    xilixjd
    xilixjd
    May 23, 2017
    3
    js 的坏处就在于这些语言的缺陷增加了学习成本
    jtsai
    jtsai
    May 23, 2017❤️2
    4
    我抽过烟、打过架、堕过胎,但我觉得我还是一个好女孩
    fds
    fds
    May 23, 2017
    5
    本来定义就不是有序的呀,谈不上悖论
    Presbyter
    Presbyter
    May 23, 2017
    6
    楼主需要理解一下 Boolean
    http://www.w3school.com.cn/js/js_obj_boolean.asp
    Mitt
    Mitt
    May 23, 2017
    7
    这是每个语言间的定义问题,想知道为什么会发生这种事情就要去看原理了,js 确实有些时候蛋疼,不过我感觉 js 是所有语言中最神奇的
    moxhuis
    moxhuis
    May 23, 2017
    8
    6 年前端 XD
    momocraft
    momocraft
    May 23, 2017
    9
    一个通用语言中的所有值不太可能构成偏序,拿这个黑有点牵强了。
    otakustay
    otakustay
    May 23, 2017❤️3
    10
    都 2017 年了,你的眼里还是没有类型这个东西,还是拿着完全不同类型的东西去做不应该做的运算
    是的 js 有历史包袱所以有一些边界情况下会有问题,但是 2017 年了同学,2017 年的软件工程里你去踩这些边界条件还能说出来当炫耀吗?
    yoa1q7y
    yoa1q7y
    May 23, 2017
    12
    这怎么算作是悖论,你故意这么写,结果都是符合当初的语言设计标准的
    其他语言不也一样么
    popu111
    popu111
    May 23, 2017 via Android
    13
    第一二个是 true ??? excuse me ?
    mogita
    mogita
    May 23, 2017 via iPhone
    14
    我学习并用 JS 的种种「不对」拿薪水,你花掉时间研究它又是来做什么呢?
    plqws
    plqws
    May 23, 2017 via iPhone
    15
    这么说的话,看来世界上所有脚本语言都没有存在的意义了
    buckyRRRR
    buckyRRRR
    May 23, 2017❤️1
    16
    缺陷被放大也都是被面试题害的,正常工作里这些东西会给你带来麻烦,知道问题规避不可以吗
    demo
    demo
    May 23, 2017
    17
    楼主不知道原因吗?非严格相等比较的时候会进行类型转换,比如:

    [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
    SakuraKuma
    SakuraKuma
    May 23, 2017
    18
    感觉是被面试题气疯了的。(
    gongbaodd
    gongbaodd
    May 23, 2017
    19
    泥萌不要这么说 jj,泥萌知道 jj 有多努力么
    gouflv
    gouflv
    May 23, 2017
    20
    5 年前端 233, 有这时间学什么不好
    Exin
    Exin
    May 23, 2017
    21
    噗嗤
    exoticknight
    exoticknight
    May 23, 2017
    22
    @gouflv 噗嗤
    Phariel
    Phariel
    May 23, 2017 via Android
    23
    自认为比制定规则者聪明系列
    rozbo
    rozbo
    May 23, 2017
    24
    我是个好女孩,你们应该珍惜。
    qdwang
    qdwang
    OP
    May 23, 2017
    25
    @xilixjd 不仅仅是增加了学习成本,更重要的是它允许这样做。
    qdwang
    qdwang
    OP
    May 23, 2017
    26
    @jtsai 噗
    qdwang
    qdwang
    OP
    May 23, 2017
    27
    @rozbo 大家都很珍惜,楼上那么多喷我的,都热烈的爱着这个女孩呢
    Artists
    Artists
    May 23, 2017
    28
    似乎自然语言才能勉强算是个好语言?
    royzxq
    royzxq
    May 23, 2017
    29
    连喷点都找不到么, 我帮你找一个好吧 2.1 / 0.3
    Arrowing
    Arrowing
    May 23, 2017
    30
    我觉得没什么好讨论的,喜欢就多用点,不喜欢就少用点
    但是,你能不用吗?
    qdwang
    qdwang
    OP
    May 23, 2017
    31
    @Arrowing 等 wasm 支持 DOM, Web API 就可以不用了
    polariszc
    polariszc
    May 23, 2017❤️2
    32
    @royzxq 你才是找不到喷点吧。。这是 IEEE 的浮点数规范导致的精度问题,哪个语言都有这个问题。
    royzxq
    royzxq
    May 23, 2017❤️1
    33
    ```
    <?php
    echo null >= false && null <= false && null !== false;
    ```

    try it
    royzxq
    royzxq
    May 23, 2017
    34
    @polariszc 然而这个问题在实际环境中会带来困扰, 题主的代码不会。 这才是关键
    jtsai
    jtsai
    May 23, 2017
    35
    题主别噗,我挺喜欢 js 的,写起来挺嗨的
    solee
    solee
    May 23, 2017
    36
    我就呵呵一下
    YvesX
    YvesX
    May 23, 2017
    38
    @tyfulcrum 笑出声
    zoffy
    zoffy
    May 23, 2017
    39
    js 的 literal 表达式还是 hin 方便的
    prccn
    prccn
    May 23, 2017❤️4
    40
    1. 希望看完 ES6 ES2016 和 ES2017 的草案再说话;
    2. 不管你是使用什么语言的开发者,这种妄言让你显得都很 low ;
    3. 看到大家都在给你普及 js 基础就放心了;
    4. 忠告:以后发这种帖记得贴上 github 账号
    enenaaa
    enenaaa
    May 23, 2017
    41
    谁来告诉我, 为啥有 undefined 还要 null, 有了 null 还要 undefined。
    iugo
    iugo
    May 23, 2017
    42
    说的别的:

    我记得之前看 "漫画家" 的文章说 WebAssembly 是为了解决性能问题, 不是为了革 JS 的命.
    qdwang
    qdwang
    OP
    May 23, 2017
    43
    @iugo

    当 WebAssembly 可以解决所有问题的时候,JS 就会变成浏览器二等公民了,慢慢就可以把它淘汰了。
    iugo
    iugo
    May 23, 2017
    44
    @qdwang 这目标挺远的, 至少比 web components 远.
    qdwang
    qdwang
    OP
    May 23, 2017
    45
    @tyfulcrum 我就是那这里面的来举例子的
    qdwang
    qdwang
    OP
    May 23, 2017
    46
    @iugo 目标虽远,但是终有达到的一天。
    qdwang
    qdwang
    OP
    May 23, 2017
    47
    @Artists 当然不是,自然语言那么多歧义,是非常不好的编程语言。好的编程语言最起码需要有 well defined type system
    chairuosen
    chairuosen
    May 23, 2017
    48
    @enenaaa null 是有语意的空,undefined 是没语意的
    sirm2z
    sirm2z
    May 23, 2017
    49
    我觉得淘汰不可能,浏览器是个特殊的环境,它需要保持向前兼容,不可能有技术革新,就瘫痪掉一批网站。

    用户才是王道,浏览器有这么多,只要不是同时全部抛弃了旧的网站,这门语言就有生存的必要
    qdwang
    qdwang
    OP
    May 23, 2017
    50
    @sirm2z 淘汰的意思是,开发使用新的语言和开发环境,不是说不兼容老的代码
    windfarer
    windfarer
    May 23, 2017
    51
    sirm2z
    sirm2z
    May 23, 2017
    52
    @qdwang #50 其实根据现在开发人员的技术水平,我觉的重新整出一套新的语言,并且优于 js 是很容易的

    但是比较一下推广成本,开发人员的接受率,大厂的使用率,这样看来基本上是一个出力不讨好的事情

    只能说淘汰 js 很难,它的势头很猛,这是不能否认的,亲爹干爹也多,大家都乐于去在它基础上完善(填坑)

    我想是有一定道理的,浏览器( js 的运行环境)毕竟有多家,他们本身就在博弈

    我觉得要他们再兼容新的语言的运行环境,不是易事
    Clarencep
    Clarencep
    May 23, 2017
    53
    所以说坐等 webassembly 普及,然后各种语言都可以编译成 webassembly 跑在浏览器里面。。。
    qdwang
    qdwang
    OP
    May 23, 2017
    54
    @sirm2z

    我觉得不需要造一个新的语言,基于现有高质量的好的语言编译到 wasm 就可以了。
    推广肯定是该这些社区自行推广的,成本不高。

    淘汰 js,要从下一代程序员开始。就像现在入门的人,可以直接用 typescript 一样。再下一代的前端程序员,可以直接用其他更好的语言来开发网页程序。
    qdwang
    qdwang
    OP
    May 23, 2017
    55
    @Clarencep 没错~
    lxy
    lxy
    May 23, 2017
    56
    弱类型以及隐式转换,js 里很多这种反直觉的东西。
    很多人眼里,可解释 == 可接受,类似于 It's not a bug, it's a feature 的说法。
    问题的关键是用户是否需要这种 “ feature ”?
    buseni
    buseni
    May 23, 2017
    57
    JS 真是第一大语言
    sirm2z
    sirm2z
    May 23, 2017
    58
    @qdwang 我查了下,目前只有一种方式能调用 wasm 里提供的接口,就是用 javascript !

    所以我觉得 WebAssembly 更适合用于写模块,承接各种复杂的计算

    如图像处理、3D 运算、语音识别、视音频编码解码这种工作,主体程序还是要用 javascript 来写的
    fzhw88
    fzhw88
    May 23, 2017
    59
    这些都是语言的规范里面明确写着的,强制类型转化的规则……你那每一项转成数字都是 0,这有什么好喷的,每种语言都会有它自己的规范。
    fzhw88
    fzhw88
    May 23, 2017
    60
    [[0]],还是 0
    kimown
    kimown
    May 23, 2017 via Android❤️2
    61
    这东西没用的,如果项目里面有人写这样的代码,肯定拉他过去批一顿,写代码是要抱有一种用最简单,别人一看就懂的思路去写,写复杂的代码太简单了,但是要写出别人一看就懂的代码,那就是改改改,重构重构再重构
    Jeter
    Jeter
    May 23, 2017
    62
    @qdwang 君不见 jvm 语言何其多,Java 语法有多啰嗦,然后 Java 已死???
    visonme
    visonme
    May 23, 2017
    63
    如果觉得 js 不好可以选择 ts,作为 MS 深度用户,我也是很提倡永 TS 的,但是我大多数的工作还是用 js ( nodejs )完成了。

    对 WebAssembly 接触不深,不敢说太多,但在有限的接触中,我对 WebAssembly 的理解是,强壮 JS 而不是为了革 js 的命,不知道楼主是否认同我这个观点?

    所以说让 wasm 革命 js 是不是有点太直觉化了。
    maomaomao001
    maomaomao001
    May 23, 2017 via Android
    64
    能不能找一个,实际使用过程中的,不如别的语言的点来黑,你这样黑点都找不到乱黑,你觉得合适吗????
    Jeter
    Jeter
    May 23, 2017
    65
    @yoa1q7y 没错,楼主应该去学学 C/C++(都是强类型语言),然后玩一玩这两门语言的类型提升或者截断转换,指针间的互相转换,直到它的 C/C++代码 core dump 到楼主吹胡子瞪眼睛之后才会想起 js 有多友好。。。
    blahgeek
    blahgeek
    May 23, 2017
    66
    [0, 1, -2, -1].sort()
    Em5O7B1JGfjQnBry
    Em5O7B1JGfjQnBry
    May 23, 2017 via Android
    67
    @Jeter 你看看 JavaScript 是什么时候诞生的,C 又是什么年代诞生的,再去看看 BS 为什么需要 C++要兼容 c 的那些东西,以及为什么有时候这些底层的东西为什么会这样,你这样举例完全就是扯淡,还有强弱类型这个概念有点乱,从类型系统的角度来说,C/C++不是强类型应该比较合适
    guokeke
    guokeke
    May 23, 2017
    68
    某天,v2 上又出现了 ‘ WebAssembly 是个好...云云’
    4641585
    4641585
    May 23, 2017
    69
    @royzxq 我很好奇看到浮点数为什么会意识不到精度问题?大学不止一门课讲过吧,计算机入门读物里也都有吧。
    darklowly
    darklowly
    May 23, 2017❤️1
    70
    @qdwang 在这前端火热的年代,我一直以为就我一个人讨厌 js..


    @Jeter 乱说。C,C++类型问题,可以在半小时内记住,并且很少犯错,其实规律很简单。JS 这 SB 随时要提防着,一不小心,就要上天。还有什么指针问题,野指针,内存泄漏,coredump 等,是语言层级不一样,这个不能拿来类比。人家 C,C++可以直接操作内存地址,甚至,如果内存地址是 io 地址,可以直接操作硬件,70 年代的产物,对于老手来说只能看成是汇编的语法糖,外加语法检测而已。


    @svenFeng 算上语法检测,不乱搞的情况下,基本上算是静态语言。JS 不乱搞,都害怕出错,写一行代码,要检查 3 遍。
    hxtheone
    hxtheone
    May 23, 2017
    71
    @royzxq #29 浮点数精度问题, 这也能喷?
    chunqiuyiyu
    chunqiuyiyu
    May 23, 2017
    72
    我越来越喜欢 JavaScript 了,尤其是现在的 ES6 语法,写起来太爽了
    Jeter
    Jeter
    May 23, 2017
    73
    @darklowly 好吧,我没说明白,我是想说,C/C++在使用时总是会碰到隐式转换的问题,而且因为它直接操作内存,很多问题 core dump 解决后还需要重新编译构建,对于前端这种需要快速开发的场景很不友好。。而楼主他试图通过“ well defined type system ”的语言编译成 wasm,去避免他帖子里提到的 JS 语言设计问题(然而这些值转换都已经成为标准了),而 C/C++只是我举的一个 [不适合前端] 这个开发场景的例子,来反驳楼主的上述观点。。。确实,JS 的值转换相对很多语言相当 SB (但是已经写入标准了),所以,如果没有能力去改变 JS 这种窘状的话,就去把标准看清楚再来讨论。。。
    WENLIANG29
    WENLIANG29
    May 24, 2017
    74
    老铁,发这种引战帖没什么意思。JS 固然有很多历史上语言设计的弊端,它也有它的优势,况且语言设计也在慢慢变好。PHP 不也总有人骂么,PHP7 和 PHP-JIT 带来的提升也很大。你总揪着历史缺点不放没意思,而且还是这种老掉牙的喷法。有空不如多写几行代码 -。- (建议你去看一下 Mozilla 核心工程师 Lin Clark 的这篇文章再来说什么 WASM 淘汰 JS 的事 https://hacks.mozilla.org/2017/02/a-cartoon-intro-to-webassembly/) DOM、BOM、Accessibility 等等都是问题。
    Ahri
    Ahri
    May 24, 2017
    75
    Java 程序员都是好程序员(滑稽
    qdwang
    qdwang
    OP
    May 24, 2017 via iPhone
    76
    @sirm2z 嗯 目前是这样 以后怎么样说不准呀
    Cbdy
    Cbdy
    May 24, 2017 via Android
    77
    @Jeter c/c++这两个都是弱类型语言。。。
    sagaxu
    sagaxu
    May 24, 2017
    78
    语法丑陋没关系,反正不写原生 js,我都是用其它语言写了编译成 js 用
    enenaaa
    enenaaa
    May 24, 2017
    79
    @chairuosen 空不就是未定义么。java 也有 null, 其他语言还有 nil, None, nullptr,叫啥都行。 但谁特么搞两个,神经病啊。
    chenyu0532
    chenyu0532
    May 24, 2017
    80
    笑看楼主被喷、、
    caniuse
    caniuse
    May 24, 2017
    81
    JavaScript 是最好的语言
    jlyybz
    jlyybz
    May 24, 2017
    82
    我觉得 js 真不错 ~
    chairuosen
    chairuosen
    May 24, 2017
    83
    @enenaaa 明确的告诉你没有,和没告诉你有没有,一样么?
    awesomes
    awesomes
    May 24, 2017
    84
    人家 JS 之父都说了,wasm 是让 JS 更强,不是取代 JS,你想太多了
    Cbdy
    Cbdy
    May 24, 2017
    85
    @sagaxu 但是其他语言怎么操作 dom 么?
    lijsh
    lijsh
    May 24, 2017
    86
    2017 年了还有人在搞这种无谓的语言鄙视,用的还是平时很难遇到的 edge case,楼主有空干点啥不好。
    qdwang
    qdwang
    OP
    May 24, 2017
    87
    @Cbdy 类似 BuckleScript 可以在编译的时候增加一些语言特性,来编译成操作 dom 的 js 指令
    solidsnake
    solidsnake
    May 24, 2017 via iPhone
    88
    你也挺滑稽的
    sagaxu
    sagaxu
    May 24, 2017
    89
    @Cbdy 直接操作啊,原生 js 能调用的库和方法,其他语言都能调
    ajan
    ajan
    May 24, 2017
    90
    楼主自己来造一种语言吧! 我看好你
    gjerryfe
    gjerryfe
    May 24, 2017 via iPhone❤️1
    91
    楼主提出一个问题,楼上各位开始各种人身攻击,可见各位的自尊心 成熟感已经负值
    issues
    issues
    May 24, 2017
    92
    js 的框架能影响语言本身<逃
    MushishiXian
    MushishiXian
    May 24, 2017
    93
    还在鄙视语言的人到底有多 low......又不是没有往好的方向发展,与其去鄙视,还不如先提高自己水平吧
    yanzixuan
    yanzixuan
    May 24, 2017
    94
    在 js 基础上搞得 es 虽然是补漏洞,但是新人上手就有点郁闷了,不能知其然不知其所以然。。
    wly19960911
    wly19960911
    May 24, 2017 via Android
    95
    就这就叫缺点?

    +[]

    看看结果是什么。说实话揪着语言这些问题不放不太好。平常没人用这种写法,感觉就是面试笔试题刁难人,有谁敢写这种估计已经被打死了
    Halomaple
    Halomaple
    May 24, 2017
    96
    谁告诉你 Boolean(false) 结果是 true 了? Boolean('false') 和 Boolean(false)都分不清楚就来引战?
    Halomaple
    Halomaple
    May 24, 2017
    97
    @popu111 楼主连基本的类型转换都分不清楚,也没验证就来引战了
    topgrd
    topgrd
    May 24, 2017
    98
    WebAssembly 是不会革了 JS 的命的,之后的发展更可能是两者各用于擅长的地方,在 web 中两者同时存在,虽然 JavaScript 槽点很多,但不是正在向好的方向发展么?
    learnshare
    learnshare
    May 24, 2017
    100
    我现在更推荐直接上 TypeScript,忘掉 JavaScript
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2441 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 133ms · UTC 14:53 · PVG 22:53 · LAX 06:53 · JFK 09:53
    ♥ Do have faith in what you're doing.