前幾天寫js,跟蹤除錯時,發現誤傳了引數型別【原本需要的是number型別的,結果傳遞的實參卻是string型別的】。結果居然沒有產生異常,仍然順利地執行了。
於是,今天特地做了幾個測試。
(1)字串型別數字的自加
/* *測試字串型別數字的自加操作 */ function teststringselfadd() alert("i=" + i + " " + "i的型別:" + (typeof i)); }
測試結果:
此處可以看到,對字串格式的數字進行自加操作時,變數型別會轉變為number型別。運算上也具有了和number型別變數同樣的行為。
接著再來看一下,是否字元"a"在做自加運算時,會被當做97(其ascii值)?
/* *測試字串型別數字的自加操作 */ function teststringselfadd() alert("i=" + i + " " + "i的型別:" + (typeof i)); }
測試結果:
可以看到,在做自加時,變數仍然會被轉型。但是,此處並非我們預期的,轉化為ascii值,而是變成了nan。說明,非數值形式的字串不可用來進行這種運算。
事實上,也只是++運算子上產生了字元格式的數值可以被轉型為number參與運算,而這裡的i++並不等同於高階強型別語言中的i=i+1; 因為這裡i原本就是字串型別,所以這裡的+會被過載為連線字串。
測試: /* *測試字串型別數字的自加操作 */ function teststringselfadd() alert("i=" + i + " " + "i的型別:" + (typeof i)); }
測試結果:
(2)測試字串型別的數值和number型別的數值的比較操作:
/* *測試字串的比較 */ function teststringcompare()
可見,字串格式的數值在和number型別的數值進行比較時和兩個number型別的數值比較無異。
因此,希望大家,下次在用的時候還是不要依賴js運算子的這些「機制」。還是,要正確地檢查型別,才能構建出更安全的**。
關於js中字串格式的數字的幾個測試
前幾天寫js,跟蹤除錯時,發現誤傳了引數型別 原本需要的是number型別的,結果傳遞的實參卻是string型別的 結果居然沒有產生異常,仍然順利地執行了。於是,今天特地做了幾個測試。1 字串型別數字的自加 測試字串型別數字的自加操作 function teststringselfadd alert...
JS中字串轉數字
js提供了parseint 和parsefloat 兩個轉換函式。前者把值轉換成整數,後者把值轉換成浮點數。只有對string型別呼叫這些方法,這兩個函式才能正確執行,對其他型別返回的都是nan not a number 示例如下 parseint 123 返回值是數字123 parseint 12...
js提取字串中的數字
前面帶數字,後面非數字的,可以使用parseint來提取 var date 周二 11月 10 16 22 36 2020 var date list date.split console.log date list var year date list 4 提取11月中的數字11 var mont...