84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
##
认证高级PHP讲师
從你給的程式碼來看,目前使用情境裡沒必要預先賦值為string類型。不預設也不會出錯。
但不賦值和賦值為空字串有個本質的區別,即改變了變數的類型。
不進行賦值的時候是undefined類型,賦值為null則是null類型,賦值為空字串""則為string類型。
穩妥起見,既然這個變數的預期結果是string類型,那麼聲明時就指定其型別是很穩的辦法。
如果不指定呢?那有時候確實會出問題的。
問題主要發生在要用這個變數來拼接其他資料的時候,這很可能會觸發隱式的型別轉換,你就能發現差別了。
如下:
var a; a+"a";
那麼結果是什麼呢?不是"a",而是"undefineda"。
如果把a預設為null,則結果是"nulla"。
你的例子裡,對res是直接賦值而不是用它來拼接,所以不賦值為空字串也沒影響,但不建議這麼做。
再來個例子,拼接0-9的數字,假如你想得到的也是字串,如"0123456789":
var res; for (var i = 0; i < 10; i++) { res+=i; } console.log(res);
那麼不聲明的話可以嗎?不可以,res會被轉換成number型,但undefined轉換後是NaN,最後你得到的結果也是NaN。
如果把res賦值為""空字串,那才正確。
當前案例可以不用預先定義為空字串,可刪除提高程式碼可閱讀性
空字串一般運用在針對一個字串條件判斷操作或對自身操作的場景:第一種:
var a = ''; if (xxx) { a = 'hello'; } console.log('a'); //这时如果你不提前定义好a,如果条件不满足if,那么就不会执行,下面调用变量a的时候就会undefined
第二種:
var a = ''; a += 2; //这其实也要调用变量a,如果不提前定义,那么也是undefined
雷雷
個人認為是作者無意間的做法…
若硬要解讀,這樣也好也不好。好是因為你可以直觀地認識到res是一個字符串變量,增強了可讀性;不好則因為多了一次對象創建和釋放的過程,性能有損耗,儘管損耗可以忽略不計。
從你給的程式碼來看,目前使用情境裡沒必要預先賦值為string類型。不預設也不會出錯。
但不賦值和賦值為空字串有個本質的區別,即改變了變數的類型。
不進行賦值的時候是undefined類型,賦值為null則是null類型,賦值為空字串""則為string類型。
穩妥起見,既然這個變數的預期結果是string類型,那麼聲明時就指定其型別是很穩的辦法。
如果不指定呢?那有時候確實會出問題的。
問題主要發生在要用這個變數來拼接其他資料的時候,這很可能會觸發隱式的型別轉換,你就能發現差別了。
如下:
那麼結果是什麼呢?不是"a",而是"undefineda"。
如果把a預設為null,則結果是"nulla"。
你的例子裡,對res是直接賦值而不是用它來拼接,所以不賦值為空字串也沒影響,但不建議這麼做。
再來個例子,拼接0-9的數字,假如你想得到的也是字串,如"0123456789":
那麼不聲明的話可以嗎?不可以,res會被轉換成number型,但undefined轉換後是NaN,最後你得到的結果也是NaN。
如果把res賦值為""空字串,那才正確。
當前案例可以不用預先定義為空字串,可刪除提高程式碼可閱讀性
空字串一般運用在針對一個字串條件判斷操作或對自身操作的場景:
第一種:
第二種:
雷雷
個人認為是作者無意間的做法…
若硬要解讀,這樣也好也不好。好是因為你可以直觀地認識到res是一個字符串變量,增強了可讀性;不好則因為多了一次對象創建和釋放的過程,性能有損耗,儘管損耗可以忽略不計。