2017-04-20 28 views
0

考慮:總是使用表達式中最少的字符返回truthy的最有效方法?

(1); 
(0); 
(-1); 
("a string"); 
(""); 
(null); 
(undefined); 

什麼可以放在括號前面總是返回truthy值。

一個函數定義爲

var a =() => true; 

將工作。因此,將這個字母放在列表中的每個項目的前面,每個項目都會返回true(一個thruthy值),因爲這會創建一個對「a」的函數調用。但是這需要每次調用一個函數。

a(1); 
a(0); 
a(-1); 
a("a string"); 
a(""); 
a(null); 
a(undefined); 

有沒有更有效的方法來做到這一點。我試過了 !!這對於錯誤的值不起作用。也嘗試〜代字號,但不會在(-1)上產生0和兩個波形符號~~但這不會在(0)上工作。任何其他可以用來總是返回真值的符號,或者是唯一能夠做到這一點的函數?

尋找一個答案,使用1或2個字符,但不涉及調用函數。使用node.js這樣ES6的答案會有效果,如果有的話。

+1

有什麼實際使用情況的呢? –

+0

true || (1); true || (0); true || (「一個字符串」); true || ( 「」); true || (未定義); :) – Ninjaneer

+0

@ Mike McCaughan與控制流有關。 – esnm

回答

3

只要表達的另一側被轉換爲數字(我認爲它總是這樣),1 | X絕不應該能夠返回0。所以,你可以使用:

console.log(1|(1), 
 
1|(0), 
 
1|(-1), 
 
1|("a string"), 
 
1|(""), 
 
1|(null), 
 
1|(undefined), 
 
1|(console.log(3)), 
 
1|(Infinity))

得到了這個想法:Bitwise operations on non numbers

+0

表達式中沒有記錄'true'? – guest271314

+0

@ guest271314他想要一個真值,不是真的 – juvian

+0

啊,沒有注意到那部分的要求。 – guest271314

1

可以使用逗號操作符,包括以下true

console.log((1, true), 
 
(0, true), 
 
("a string", true), 
 
("", true), 
 
(undefined, true));

,您也可以使用Logical NOT!Sign-propagating right shift>>表達的第一部分,以及1

console.log(!((1) >> 1), 
 
!((0) >> 1), 
 
!(("a string") >> 1), 
 
!(("") >> 1), 
 
!((undefined) >> 1));

其也可以由通過使用滿足前述操作者或表達的要求!(0 >> (<expression>))

console.log(!(0 >> (1)), 
 
!(0 >> (0)), 
 
!(0 >> ("a string")), 
 
!(0 >> ("")), 
 
!(0 >> (undefined)));

+0

甚至更​​短:,!! !! 1 – juvian

+0

@juvian'!!'會返回false!(0)' – guest271314

+0

?只是想取代真正的!1 – juvian

相關問題