避免在JavaScript代碼中使用if語句的方式方法

英文 | 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語句更改爲字典對象的快捷方式,以使我們的代碼更短,更清晰。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章