国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

You-Dont-Know-JS / Types & Grammar 筆記二

KitorinZero / 799人閱讀

摘要:原文測試對象包裝基礎數據類型沒有屬性和方法,為了使用方法和函數,就需要對應的對象包裝它。注意,用構造器構造的對象,永遠是。它們都是對象。它們都是非空字符串。

原文

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)

ToNumber

true變成1,false變成0,undefined變成NaNnull變成0,""變成0,[]變成0

當進行數值計算時,數字型字符串變成數字,非數字型字符串變成NaN,對象先通過toSting()變成字符串,再參與計算。

[2]*2 // 4
[2,3]*2 // NaN
["2"]*2 // 4
"A"*2 // NaN
null+2 // 2
""*2 // 0
ToBoolean

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; // false
Date 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() // TypeError
Parsing 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 &amp; Grammar 筆記

    摘要:以下這個情況并非獨有,任何采用二進制浮點數,依據都會如此這是因為用二進制浮點表示并不精確。是,不過更準確的定義應該是,,因為實際上它還是個。是聲明變量的默認值。數字還有個特殊的數值數字和數字對象 原文 You Dont Know JS: Types & Grammar 類型 null undefined boolean number string object symbol -- a...

    Drummor 評論0 收藏0
  • 前端資源系列(4)-前端學習資源分享&amp;前端面試資源匯總

    摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...

    princekin 評論0 收藏0
  • [你不知道的 JavaScript 類型和語法] 第一章:類型

    摘要:語言中規定的類型為以及。這兩個值有不同的類型。內建類型定義了七種內建類型中新增提示以上類型,除的被稱為基本類型。新增列出的六種類型的值都會返回一個對應類型名稱的字符串。是中新增的數據類型,我們會在第三章詳細介紹。 譯者的前言 一直都想好好研究這個在 GitHub 上很有名氣的系列,而翻譯恰是最好的閱讀途徑之一。可以讓我閱讀的時候,不那么不求甚解。 圖靈社區出版了該系列兩部分的中文版——...

    Astrian 評論0 收藏0
  • Stack &amp; Queue 棧和隊列的學習筆記

    摘要:的前部分內容講的是棧和隊列的實現。學習環境在學習這門課之前,先引入的概念,即抽象數據類型。鏈表實現學習,鏈表實現簡單的數組實現鏈表實現簡單的數組實現解決使用棧或者隊列時,的數據類型指定問題。 Week2 的前部分內容講的是棧和隊列的Java實現。學習環境:mac, inteliJ, java version 1.8.0_77 在學習這門課之前,先引入Abstract Data Type...

    peixn 評論0 收藏0
  • Laravel 學習筆記之 Query Builder 源碼解析(中)

    說明:本篇主要學習數據庫連接階段和編譯SQL語句部分相關源碼。實際上,上篇已經聊到Query Builder通過連接工廠類ConnectionFactory構造出了MySqlConnection實例(假設驅動driver是mysql),在該MySqlConnection中主要有三件利器:IlluminateDatabaseMysqlConnector;IlluminateDatabaseQuery...

    zhou_you 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<