var num = number(true); console.log(typeof(num) + num)
—結果:number: 1
var num = number(false); console.log(typeof(num) + num)
—結果:number: 0
var num = number(null); console.log(typeof(num) + num)
—結果:number: 0
var num = number(undefined); console.log(typeof(num) + num)
—結果:number: nan
var num = number(「-123」); console.log(typeof(num) + num)
—結果:number: -123
var num = number(「123abc」); console.log(typeof(num) + num)
—結果:number: nan
將數字轉化為整形,也可以將字串轉化為數字。
var demo = 10; console.log( parseint(demo,16));
—將10當16進製制轉化為10進製 number:17
var demo = "123.12abc"; console.log( parseint(demo,16));
— number:123 以非數字位為斷點轉化
var demo = "123.12abc"; console.log( parseint(demo,16));
— number:123.12 以非數字位為斷點轉化**(除了小數點)**
這裡寫什麼東西都會變成相對應的字串
undefined null不能使用此函式「12".tostring();
"123".tostring(8);以8進製將123轉化成字串
var num = 1+'1' ; console.log( typeof num)
—結果:string
var num = 1*'1' ; console.log( typeof num)
—結果:number
var num = 1-'1' ; console.log( typeof num)
—結果:number
var num = '2'+'1' ; console.log( typeof num)
—結果:string
var num = '2'-'1' ; console.log( typeof num)
—結果:number
var num = '2'*'1' ; console.log( typeof num)
—結果:number
隱式轉化number(demo)—>再與nan比較是nan輸出true,否則輸出false
隱式轉化number(demo)—>再++ –
隱式轉化number(demo)—>再進行- * / =
+號兩側有乙個string型別就都轉化為string
100>10>0 false 100>10>0 true 挨個計算(100>10)為true就轉化為1了,再和後面的數值比較。
symbolundefined>0 false; undefined<0 false; undefined ==0 false;
null>0 false; null<0 false; null ==0 false;
null ==undefined; true
nan == nan ; false
typeof(typeof(undefined)) string
typeof nan `===` 'number' ; true
0==null; false
0==undefined; false
這個型別轉換為字串必須是顯示的,隱式轉換會出錯
25.try catch 語句var s = symbol('aabb');
string(s); //"symbol(aabb)"
s + ""; //typeerror: cannot convert a symbol value to a string
try 中的 return 和 throw 會在有 finally 語句是中的 return 或 throw 覆蓋(這裡的確是覆蓋,而不是前乙個 return 未執行,
(() => finally })(); // 2
對於大於(等於)和小於(等於)號,兩個物件 a 和 b 都被轉換成了字串 「[object object]」,所以他們應該是相等的,所以 a < b 和 a > b 都是 false,而 a <= b 和 a > = b 都是 true。但是 a == b 為 false。有了上面的知識,就很好理解這個問題,a, b都是物件,所以不發生型別轉換,而兩個物件引用不同,結果為 false。var a = ;
var b = ;
a < b; //false
a == b; //false
a > b; //false
a <= b; //true
a >= b; //true
27.陣列中的 null 和 undefined
陣列中的 null 和 undefined 會在轉換為字串時被看做空,也就是可以直接忽略。== 會按前面的型別進行轉換
27.tolocalestring 和 tostring"" == [null]; //true
"1,,3" == [1,undefined,3] //true
tolocalestring 和 tostring 方法同時存在,它定義了個性化的字串轉換功能,對於物件而言 tolocalestring 和 tostring 是一樣的。不過array, number, date 和typedarray(es6中的型別,這裡不討論)都重寫了 tolocalestring。比如說數值型別:
日期型別:console.log((1234).tolocalestring()); //1,234
console.log((1234567).tolocalestring('zh-hans-cn-u-nu-hanidec', )); //一二三四五六七
console.log((1234567).tolocalestring('zh-hans-cn-u-nu-hanidec', )); //一,二三四,五六七
得到一些地域性的時間表示
陣列型別的 tolocalestring 就是將陣列中的數值型別和日期型別分別按 tolocalestring 轉換為字串,再形成整體字串。var date = new date();
console.log(date.tostring()); //tue apr 15 2014 11:50:51 gmt+0800 (中國標準時間)
console.log(date.tolocalestring()); //2014-4-15 11:50:51
console.log(date.tolocaledatestring()); //2014-4-15
console.log(date.tolocaletimestring()); //上午11:50:51
關於 tolocalestring 的定義官方也是故意沒給出具體的實現細節【坑19】,這一點完全不能理解,所以這個方法用的場合也比較有限,這裡不再贅述了
28.-0和+0是一致的
console.log(+0 === -0); //true
console.log(+0 == -0); //true
parseint() 和 number() 都會忽略字串首尾的空格,但parseint() 不會忽略格式化字元,而number() 會將格式化字元與空格一起忽略
number(" 34\n\t "); //34
number(" \t34 "); //34
number(" 3\t\n4 "); //nan, 不和開頭結尾的空格一起的格式化字元不會被忽略
parseint(" \t34 "); //nan
他們對空字串的處理也不一樣
number(" "); //0, 空格被忽略了,所以 " " 等價於 ""
parseint(" "); //nan, 空格被忽略了,所以 " " 等價於 ""
JavaScript型別轉換
方法主要有三種 轉換函式 強制型別轉換 利用js變數弱型別轉換。1.轉換函式 js提供了parseint 和parsefloat 兩個轉換函式。前者把值轉換成整數,後者把值轉換成浮點數。只有對string型別呼叫這些方法,這兩個函式才能正確執行 對其他型別返回的都是nan not a number ...
JavaScript 型別轉換
僅針對字串 轉換規則 1.忽略字串前面的空格,直到找到第乙個非空格符 2.如果第乙個字元不是數字或負號,返回 nan parseint nan 3.如果第乙個字元是數字字元,繼續解析第二個字元,直到解析完所有後續字元或遇到乙個非數字字元 parseint 9527great 9527 parsein...
javascript資料型別轉換
isnan 判斷是否不是乙個有效數字,是有效數字返回false,否則返回true isnan 會隱式呼叫number 方法,把值轉強制換成數字資料型別 非強制轉換成數字 parseint 從左到右查詢數字,遇到非數字就停止 parsefloat 比parseint多識別乙個小數點 string 轉換...