成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

KitorinZero / 809人閱讀

摘要:原文測試對象包裝基礎(chǔ)數(shù)據(jù)類型沒有屬性和方法,為了使用方法和函數(shù),就需要對應(yīng)的對象包裝它。注意,用構(gòu)造器構(gòu)造的對象,永遠(yuǎn)是。它們都是對象。它們都是非空字符串。

原文

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"}

基礎(chǔ)數(shù)據(jù)類型沒有屬性和方法,為了使用方法和函數(shù),就需要對應(yīng)的對象包裝它。JS可以自動做到這一點(diǎn)。

var a = "abc";

a.length; // 3
a.toUpperCase(); // "ABC"

注意,用構(gòu)造器構(gòu)造的對象,永遠(yuǎn)是“truthy”。

var a = new Boolean( false );

if (!a) {
    console.log( "Oops" ); // never runs
}
類型轉(zhuǎn)換 ToString

默認(rèn)調(diào)用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"

數(shù)組默認(rèn)調(diào)用toString()

JSON字符串化,會忽略undefined,function,symbol,循環(huán)引用的對象還會報錯。

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

當(dāng)進(jìn)行數(shù)值計(jì)算時,數(shù)字型字符串變成數(shù)字,非數(shù)字型字符串變成NaN,對象先通過toSting()變成字符串,再參與計(jì)算。

[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

當(dāng)傳入的非字符串先轉(zhuǎn)化為字符串,調(diào)用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
隱式轉(zhuǎn)換
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!

有必要改天重新整理下

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89702.html

相關(guān)文章

  • You-Dont-Know-JS / Types &amp; Grammar 筆記

    摘要:以下這個情況并非獨(dú)有,任何采用二進(jìn)制浮點(diǎn)數(shù),依據(jù)都會如此這是因?yàn)橛枚M(jìn)制浮點(diǎn)表示并不精確。是,不過更準(zhǔn)確的定義應(yīng)該是,,因?yàn)閷?shí)際上它還是個。是聲明變量的默認(rèn)值。數(shù)字還有個特殊的數(shù)值數(shù)字和數(shù)字對象 原文 You Dont Know JS: Types & Grammar 類型 null undefined boolean number string object symbol -- a...

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

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

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

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

    Astrian 評論0 收藏0
  • Stack &amp; Queue 棧和隊(duì)列的學(xué)習(xí)筆記

    摘要:的前部分內(nèi)容講的是棧和隊(duì)列的實(shí)現(xiàn)。學(xué)習(xí)環(huán)境在學(xué)習(xí)這門課之前,先引入的概念,即抽象數(shù)據(jù)類型。鏈表實(shí)現(xiàn)學(xué)習(xí),鏈表實(shí)現(xiàn)簡單的數(shù)組實(shí)現(xiàn)鏈表實(shí)現(xiàn)簡單的數(shù)組實(shí)現(xiàn)解決使用棧或者隊(duì)列時,的數(shù)據(jù)類型指定問題。 Week2 的前部分內(nèi)容講的是棧和隊(duì)列的Java實(shí)現(xiàn)。學(xué)習(xí)環(huán)境:mac, inteliJ, java version 1.8.0_77 在學(xué)習(xí)這門課之前,先引入Abstract Data Type...

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

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

    zhou_you 評論0 收藏0

發(fā)表評論

0條評論

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