英文 | https://medium.com/javascript-in-plain-english/avoiding-if-statements-in-our-javascript-code-29406677268e
翻譯 | web前端開發(ID:web_qdkf)
在JavaScript代碼中使用if語句,會讓人有時候覺得很痛苦。 其實,在很多地方,我們可以不需要它們。
我們可以將if語句替換爲其他類型的代碼,以使我們的代碼更短,更清晰。
在本文中,我們將探討可以在JavaScript代碼中替換if語句的地方。
三元運算符
如果我們要返回具有一個條件的一個事件,否則返回其他東西,則三元運算符很有用。
例如,我們可以這樣寫:
const bar = foo ? 'foo' : 'bar';
在上面的代碼中,如果foo爲true,則返回'foo'。否則,我們返回'bar'。
然後,如果foo爲true,則bar爲'foo'。否則,bar爲'bar'。
上面代碼比以下簡短得多:
const bar = ((foo) => { if (foo) { return 'foo' } return 'bar'})(foo);
使用三元運算符,我們不必使用內部if語句定義一個匿名函數,如果foo爲true,則返回“ foo”,否則返回“ bar”。
另外,定義後,我們不必立即使用foo調用它。因此,它更容易讀寫。
但是,我們不應該通過嵌套它們來濫用三元運算符:
const foo = a ? b ? c ? 'foo' : 'bar' : 'baz' : 'qux';
上面的代碼很難閱讀,因爲我們必須在括號內加括號以在我們自己的腦海中劃定界限。
這在我們的大腦上很難解決,因此我們不應該採用上述表達。
短路表達式
我們將使用&&或|| 的操作員稱爲短路操作員。
如果第一個操作數爲真,則&&運算符對於在第二個操作數中運行代碼很有用。|| 如果第一個操作數爲false,則運算符對於在第二個操作數中運行代碼很有用。
例如,我們可以按以下方式使用它:
const isOnline = true;const makeRequest = () => { //...}isOnline && makeRequest();
在上面的代碼中,如果isOnline爲true,則調用makeRequest。因此,由於isOnline爲true,所以我們調用makeRequest函數。
這將替換以下if語句:
if (isOnline) { makeRequest();}
如我們所見,在使用相同的isOnline和makeRequest值的情況下,使用if語句需要3行代碼來完成相同的操作。
與|| 運算符,如果第一個操作數爲false,則可以使用它來設置默認值。
例如,我們可以編寫以下代碼:
const foo = null;const bar = foo || 'abc';
在上面的代碼中,我們將foo設置爲null,這是false。因此,在第二行,|| 運算符將計算foo常量,該常量爲null,因此也爲false。
然後,由於它是false,它將繼續評估第二個操作數,然後將其返回。
因此,bar的值爲'abc'。編碼:
const bar = foo || 'abc';
替換以下代碼:
const bar = ((foo) => { if (!foo) { return 'abc' } return foo;})(foo)
如我們所見,我們必須定義一個匿名函數,然後調用它。
該函數將foo作爲參數,然後在其內部檢查foo是否虛假。如果是虛假的,那麼我們返回'abc'。否則,我們返回foo。
||的替代品 運算符更長,更復雜。
避免使用switch語句
switch語句的許多用法可以用更簡單的方法代替。例如,代替編寫以下switch語句:
const getDescription = (breed) => { switch (breed) { case 'border': return 'kind dog'; case 'pitbull': return 'angry dog'; case 'german': return 'smart dog'; default: return '' }}const desc = getDescription('border');
我們可以將值放在對象中,如下所示:
const descs = { 'border': 'kind dog', 'pitbull': 'angry dog', 'german': 'smart dog',}const desc = descs['border']
在上面的代碼中,我們將case值作爲屬性,將返回值作爲屬性的值。
然後,我們可以像在最後一行中一樣獲取值,而不用調用longyswitch語句。
如果要獲取默認情況,可以使用||。如下:
const desc = descs['foo'] || '';
現在,我們將一個長的switch語句縮小爲一個小對象。
結論
在許多情況下,我們可以減少if並將語句切換爲較短的代碼。我們應該記住要使用三元運算符,短路運算和將switch語句更改爲字典對象的快捷方式,以使我們的代碼更短,更清晰。