做常见事的javascript习语

mko*_*yak 8 javascript

我已经编程了JS多年,我仍然在寻找新的快捷方式.我想知道是否还有更多我不知道的事情.

以下是我所知道的捷径:

编辑:我同意你通常不应该做这些事情,并且可以有一种更好的方式来描述它不那么广泛,但我能做的最好的就是通过例子来描述它.


而不是这个

if("foobar".indexOf("foo") > -1) 
Run Code Online (Sandbox Code Playgroud)

做这个

if(~"foobar".indexOf("foo"))
Run Code Online (Sandbox Code Playgroud)

而不是这个

var foo = Math.floor(2.333)
Run Code Online (Sandbox Code Playgroud)

做这个

var foo = ~~2.333
Run Code Online (Sandbox Code Playgroud)

而不是这个

var foo = parseFloat("12.4")
var bar = parseInt("12", 10)
Run Code Online (Sandbox Code Playgroud)

这样做(不是这个的忠实粉丝)

var foo = +"12.4"
var bar = +"12"
Run Code Online (Sandbox Code Playgroud)

而不是这个

if(isNaN(foo)
Run Code Online (Sandbox Code Playgroud)

做这个

if(foo != foo)
Run Code Online (Sandbox Code Playgroud)

而不是这个

(function(){ ... ])()
Run Code Online (Sandbox Code Playgroud)

做这个

!function(){ ... }()
Run Code Online (Sandbox Code Playgroud)

通过为其添加前缀将任何内容转换为布尔值 !!

var isFoo = !!foo
Run Code Online (Sandbox Code Playgroud)

在那里,你有它,我的事情列表永远不会对你的同事.

还可以在这里添加其他内容吗?

Dan*_*umb 13

这个问题可能会因为过于宽泛而被关闭,而这个答案可能因为没有直接回答而得到了相当多的赞成票,但是这里也是如此.

,,真正做到小心谨慎约在编程语言使用"快捷方式",因为...... 真的 ......他们是谁帮助?

大多数这些捷径都会牺牲击键的清晰度和明确性.你不会找到一个单一的,称职的,专业的程序员,他会同意这是一个明智的权衡.

考虑

if("foobar".indexOf("foo") > -1)
Run Code Online (Sandbox Code Playgroud)

if(~"foobar".indexOf("foo"))
Run Code Online (Sandbox Code Playgroud)

你已经保存了4个角色......呐喊!但是,你也保证任何不知道这条捷径的人都很难有机会弄清楚这里发生了什么......当然也不容易.

阅读定义indexOf足以理解显式版本.对于第二个,您需要了解其~含义(这在JS中是一个相当罕见的运算符).然后,您需要知道-1的按位补码是什么.然后你需要意识到这是真的.

这是一个愚蠢的权衡,它是许多这些习语的标志.

请不要这样做.这不是80年代.

  • "这不是80年代." - 哦,大便,药物必须磨损.该死!(+ 1 BTW) (3认同)

Ble*_*der 4

  • n | 0楼层n(仅当n位于有符号 32 位整数范围内时)。它比Math.floor()我上次检查的大多数浏览器都要快。
  • undefined == null,但都不等于false
  • 相反x == 'a' || x == 'b' || x == 'c',你可以这样做['a', 'b', 'c'].indexOf(x) !== -1

我在生产代码中看到的唯一真正简短的快捷方式是+将字符串转换为数字的一元。