JavaScript 比 C 有更重的心智负担, Jser 们别卷框架了,卷点语言吧

9 天前
 AceGo

语言要尽量贴近自然规则,规则定义越少越好。js 规则多,有些还毫无必要。用 0 表示 1 月这都什么规则啊,还有{}规则。

6470 次点击
所在节点    JavaScript
86 条回复
dudubaba
9 天前
这完全不是 js 语言的错,0 表示 1 月不就跟下标是一样的吗,很难理解? 维基百科中 “阿拉伯语、希伯来语、越南语和葡萄牙语以星期日作为一周中的第一天”,这个又怎么算呢?
glcolof
9 天前
据说 Javascript 程序员是所有程序员里面最推崇 Rust 的,颇有一种东北人最喜欢海南的既视感。
DOLLOR
9 天前
@glcolof
JavaScript 程序员的海南是 TypeScript ,啥时候是 Rust 了?
bojackhorseman
9 天前
@glcolof 笑死,js 菜鸡表示,根本学不会 rust
LUO12826
9 天前
(娱乐向)楼主先停停,解读一下这个 C 声明是什么类型~(其实不算很复杂)
int (*(*func)(int *p))[5];
tkHello
9 天前
赶紧给我卷 成果呢 成果呢 成果呢 我要成果
AceGo
9 天前
c 不好,java 不好,整个 c++、kotlin 、python 、rust 、go ,不断有新语言出现。
我的意思是为啥前端语言没有新发展,始终在 js 上打补丁,修修补补有三年。
AceGo
9 天前
这更差,那更差的,这坨屎不是最差的。说这是“屎”还急眼了。
手搓库、枚举 Month 等,这不就是打补丁吗,C 内存被诟病,有了 rust 有了 go 啊
打补丁和发展新语言是一回事儿吗
shijingshijing
9 天前
@LUO12826 什么样的场景会用到这个。。。
10bkill1p
9 天前
你问浏览器厂商啊,问我们干什么
dfkjgklfdjg
9 天前
C 的 localtime() 月份不就是从 0 开始的吗?
ck65
9 天前
Seven711
9 天前
@AceGo “我的意思是为啥前端语言没有新发展,始终在 js 上打补丁,修修补补有三年。”,你是真的.... 别闹笑话~哈哈哈哈
BeautifulSoap
9 天前
初学 JS 的心智负担在于 JS 作为一个 30 来年的语言,而且为了兼容各种浏览器的,几十年前老的写法用法依旧还保留着,而且很多写法你还不能不学,因为很多写法很多人都在用。然后几十年积累下来各种奇奇怪怪的写法,用法,功能,还有各种奇奇怪怪的符号能让初学的人学到头炸

|,||,??=, ??, !! 等等等等奇奇怪怪的符号

就一个异步函数,从古早的 callback 到后来的 Generator ,Promise ,再到终于初具人形的 async/await ,你终于以为可以一把 async/await 走天下了,结果是前面几种也全都要学和写,因为这几样东西现在依旧各自有非常多的使用场景。更重要的是有的人就是特别喜欢捣鼓 Promise 而有的人就是不想碰 Promise 只喜欢 async/await ,你必须都要会

再比开 strict 模式之前之后,js 行为简直就是两个语言。我至今还记得如果不开 strict 模式,就一个 this 的特性,都能让人眼前一黑

var 的的全局提升特性(谢天谢地现在终于用 var 的人少了,但各种小脚本或者内嵌 js 引擎里依旧 var 满天飞,你依旧必须学 var 这东西和里面坑)

再比如习惯了类继承概念的人接触用 prototype 实现继承的时候,一定也是学得非常难受。当然现在我已经 class extends 一把梭走天下了,prototype 让我碰那是不可能的

再比一个风格问题,箭头函数这东西的确是个好东西,但作为一个常年后端的人,看到别人经常满天飞的箭头函数依旧要扶额。普通定义一个函数都要 const foo = () =>{ } 这种写法,我虽然知道前端很喜欢这么干,但依旧觉得大受到震撼

再还有 Array.sort() 会把数组所有成员转换成字符串然后才做排序导致第一次用的人 100%中招出 bug 啊之类的都算小问题了
DOLLOR
9 天前
@BeautifulSoap

|是位操作符,||是逻辑或,!是逻辑非,都是从 C 家族继承来的符号,如果你是写 python 、lua 、pascal 过来的,确实可能会觉得奇怪。

我倒觉得`const foo = () =>{ }`比`function foo() {}`更好,后者会改变 this 指向,会提升变量,甚至在非严格模式下,会逃出语句块,重名不报错。const foo = () =>{ }一把梭就没这些心智负担,并且体现了函数跟其他数据都是同等地位的的东西,既可以赋值给变量,也可以作为参数和返回值。
BeautifulSoap
9 天前
@DOLLOR | 属于手滑了,而至于||,不好意思,你以为我是没见过逻辑或的操作符,而实际上我在跟你说的是 const result = "a" || "b" 这个写法里,reslult 的值为 "a" 而非 true 的反直觉||特性。判断左边元素真假然后返回右边元素,你跟我说这叫逻辑或,写了这么多年静态语言的我反正是不认的,python 等动态语言也没这么奇怪的逻辑或认。


> 我倒觉得`const foo = () =>{ }`比`function foo() {}`更好,后者会改变 this 指向,会提升变量,甚至在非严格模式下,会逃出语句块,重名不报错。

你看。你这就给大家解释了下什么叫 js 的心智负担
zhouyin
9 天前
c 语言 你去做个小项目 体验体验每个函数都要检查返回值 学学怎么写 makefile 虽然 go 也这样 但比 C 开发不知快了多少
DOLLOR
9 天前
“python 等动态语言也没这么奇怪的逻辑或认”
此言差矣。

以下是 python ,不支持你的观点。
result = 'a' or 'b'
print(result)
# result is 'a'

以下是 lua ,不支持你的观点。
local result = 'a' or 'b'
print(result)
result is 'a'
DOLLOR
9 天前
@BeautifulSoap
“python 等动态语言也没这么奇怪的逻辑或认”
此言差矣。

以下是 python ,不支持你的观点。
result = 'a' or 'b'
print(result)
# result is 'a'

以下是 lua ,不支持你的观点。
local result = 'a' or 'b'
print(result)
result is 'a'
TimPeake
9 天前
打起来,打起来.jpg

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

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

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

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

© 2021 V2EX