摘要:原文測試對象包裝基礎數據類型沒有屬性和方法,為了使用方法和函數,就需要對應的對象包裝它。注意,用構造器構造的對象,永遠是。它們都是對象。它們都是非空字符串。
原文
You Don"t Know JS: Types & Grammar
測試console.log(1+ "2"+"2"); console.log(1+ +"2"+"2"); console.log("A"- "B"+"2"); console.log("A"- "B"+2);
122,32,NaN2,NaN
對象包裝String()
Number()
Boolean()
Array()
Object()
Function()
RegExp()
Date()
Error()
Symbol()
var a = new String( "abc" ); typeof a; // "object" ... not "String" a instanceof String; // true Object.prototype.toString.call( a ); // "[object String]" console.log(a); // String {[[PrimitiveValue]]: "abc"}
基礎數據類型沒有屬性和方法,為了使用方法和函數,就需要對應的對象包裝它。JS可以自動做到這一點。
var a = "abc"; a.length; // 3 a.toUpperCase(); // "ABC"
注意,用構造器構造的對象,永遠是“truthy”。
var a = new Boolean( false ); if (!a) { console.log( "Oops" ); // never runs }類型轉換 ToString
默認調用toString()
[1,3,4]+"haha" // "1,3,4haha" "haha" + {f:"da"} // "haha[object Object]" {f:"da"}+"haha" // NaN var f = {f:"da"} f+"haha" // "[object Object]haha"
數組默認調用toString()
JSON字符串化,會忽略undefined,function,symbol,循環引用的對象還會報錯。
JSON.stringify( 42 ); // "42" JSON.stringify( "42" ); // ""42"" (a string with a quoted string value in it) JSON.stringify( null ); // "null" JSON.stringify( true ); // "true" JSON.stringify( undefined ); // undefined JSON.stringify( function(){} ); // undefined JSON.stringify( [1,undefined,function(){},4] ); // "[1,null,null,4]" JSON.stringify( { a:2, b:function(){} } ); // "{"a":2}"
JSON.stringify(obj, replacer, space)
ToNumbertrue變成1,false變成0,undefined變成NaN,null變成0,""變成0,[]變成0
當進行數值計算時,數字型字符串變成數字,非數字型字符串變成NaN,對象先通過toSting()變成字符串,再參與計算。
[2]*2 // 4 [2,3]*2 // NaN ["2"]*2 // 4 "A"*2 // NaN null+2 // 2 ""*2 // 0ToBoolean
falsy values
undefined
null
false
+0,-0,NaN
""
!!"" // false !!" " // true ""*1 // 0 " "*1 // 0
var a = new Boolean( false ); var b = new Number( 0 ); var c = new String( "" ); var d = Boolean( a && b && c ); d; // true
var a = []; // empty array -- truthy or falsy? var b = {}; // empty object -- truthy or falsy? var c = function(){}; // empty function -- truthy or falsy? var d = Boolean( a && b && c ); d; // true
它們都是對象。
var a = "false"; var b = "0"; var c = """"; var d = Boolean( a && b && c ); d; // true
它們都是非空字符串。
var a = "false"; var b = "0"; var c = ""; var d = Boolean( a && b && c ); d; // falseDate To Number
var d = new Date( "Mon, 18 Aug 2014 08:53:06 CDT" ); +d; // 1408369986000 // or var timestamp = +new Date(); var timestamp = new Date().getTime(); var timestamp = Date.now();
new Date().getDate() // 10 Date.now().getDay() // TypeErrorParsing Numeric Strings
var a = "42"; var b = "42px"; Number( a ); // 42 parseInt( a ); // 42 Number( b ); // NaN parseInt( b ); // 42 parseInt("px42px"); // NaN
當傳入的非字符串先轉化為字符串,調用toString()
parseInt([14,2,3]) // 14 parseInt( new String( "42") ); // 42 var a = { num: 21, toString: function() { return String( this.num * 2 ); } }; parseInt( a ); // 42隱式轉換
var a = { valueOf: function() { return 42; }, toString: function() { return 4; } }; a + ""; // "42" String( a ); // "4" [] + {} // "[object Object]" {} + [] // 0== 與 === ==
In the ES5 spec, clauses 11.9.3.4-5 say:
If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y).
If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y.
If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.
If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
If x is null and y is undefined, return true.
If x is undefined and y is null, return true.
If Type(x) is either String or Number and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).
If Type(x) is Object and Type(y) is either String or Number, return the result of the comparison ToPrimitive(x) == y.
"0" == null; // false "0" == undefined; // false "0" == false; // true -- UH OH! "0" == NaN; // false "0" == 0; // true "0" == ""; // false false == null; // false false == undefined; // false false == NaN; // false false == 0; // true -- UH OH! false == ""; // true -- UH OH! false == []; // true -- UH OH! false == {}; // false "" == null; // false "" == undefined; // false "" == NaN; // false "" == 0; // true -- UH OH! "" == []; // true -- UH OH! "" == {}; // false 0 == null; // false 0 == undefined; // false 0 == NaN; // false 0 == []; // true -- UH OH! 0 == {}; // false
瘋狂的例子
[] == ![]; // true 2 == [2]; // true "" == [null]; // true 0 == " "; // true
來源:https://github.com/dorey/JavaScript-Equality-Table
比較var a = [ 42 ]; var b = [ "43" ]; a < b; // true b < a; // false
var a = [ "42" ]; var b = [ "043" ]; a < b; // false
var a = [ 4, 2 ]; var b = [ 0, 4, 3 ]; a < b; // false
var a = { b: 42 }; var b = { b: 43 }; a < b; // false a == b; // false a > b; // false a <= b; // true a >= b; // true
Since b < a is also false, the result of a <= b is true.
var a = [ 42 ]; var b = "043"; a < b; // false -- string comparison! Number( a ) < Number( b ); // true -- number comparison!
有必要改天重新整理下
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89702.html
摘要:以下這個情況并非獨有,任何采用二進制浮點數,依據都會如此這是因為用二進制浮點表示并不精確。是,不過更準確的定義應該是,,因為實際上它還是個。是聲明變量的默認值。數字還有個特殊的數值數字和數字對象 原文 You Dont Know JS: Types & Grammar 類型 null undefined boolean number string object symbol -- a...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
摘要:語言中規定的類型為以及。這兩個值有不同的類型。內建類型定義了七種內建類型中新增提示以上類型,除的被稱為基本類型。新增列出的六種類型的值都會返回一個對應類型名稱的字符串。是中新增的數據類型,我們會在第三章詳細介紹。 譯者的前言 一直都想好好研究這個在 GitHub 上很有名氣的系列,而翻譯恰是最好的閱讀途徑之一。可以讓我閱讀的時候,不那么不求甚解。 圖靈社區出版了該系列兩部分的中文版——...
摘要:的前部分內容講的是棧和隊列的實現。學習環境在學習這門課之前,先引入的概念,即抽象數據類型。鏈表實現學習,鏈表實現簡單的數組實現鏈表實現簡單的數組實現解決使用棧或者隊列時,的數據類型指定問題。 Week2 的前部分內容講的是棧和隊列的Java實現。學習環境:mac, inteliJ, java version 1.8.0_77 在學習這門課之前,先引入Abstract Data Type...
說明:本篇主要學習數據庫連接階段和編譯SQL語句部分相關源碼。實際上,上篇已經聊到Query Builder通過連接工廠類ConnectionFactory構造出了MySqlConnection實例(假設驅動driver是mysql),在該MySqlConnection中主要有三件利器:IlluminateDatabaseMysqlConnector;IlluminateDatabaseQuery...
閱讀 540·2021-08-31 09:45
閱讀 1647·2021-08-11 11:19
閱讀 883·2019-08-30 15:55
閱讀 821·2019-08-30 10:52
閱讀 2845·2019-08-29 13:11
閱讀 2924·2019-08-23 17:08
閱讀 2833·2019-08-23 15:11
閱讀 3066·2019-08-23 14:33