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

資訊專欄INFORMATION COLUMN

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

Drummor / 3442人閱讀

摘要:以下這個(gè)情況并非獨(dú)有,任何采用二進(jìn)制浮點(diǎn)數(shù),依據(jù)都會(huì)如此這是因?yàn)橛枚M(jìn)制浮點(diǎn)表示并不精確。是,不過更準(zhǔn)確的定義應(yīng)該是,,因?yàn)閷?shí)際上它還是個(gè)。是聲明變量的默認(rèn)值。數(shù)字還有個(gè)特殊的數(shù)值數(shù)字和數(shù)字對(duì)象

原文

You Don"t Know JS: Types & Grammar

類型

null

undefined

boolean

number

string

object

symbol -- added in ES6

值得注意的情形

typeof Symbol()      === "symbol";    // true
typeof function a(){} === "function"; // true
typeof null === "object"; // true

An "undefined" variable is one that has been declared in the accessible scope, but at the moment has no other value in it.
An "undeclared" variable is one that has not been formally declared in the accessible scope.

var a;

a; // undefined
b; // ReferenceError: b is not defined

盡管b沒有定義,但用typeof對(duì)其操作后返回的也還是undefined

var a;

typeof a; // "undefined"

typeof b; // "undefined"

利用這點(diǎn),我們可以做一些檢查而避免報(bào)錯(cuò)

// oops, this would throw an error!
if (DEBUG) {
    console.log( "Debugging is starting" );
}

// this is a safe existence check
if (typeof DEBUG !== "undefined") {
    console.log( "Debugging is starting" );
}

討論數(shù)組時(shí),字符串類型的數(shù)字索引會(huì)直接被當(dāng)作數(shù)字。

var a = [ ];

a["13"] = 42;

a.length; // 14

JavaScript中字符串是不可變的,數(shù)組是可變的,所有的字符串方法都返回新的字符串。

特別大或特別小的數(shù)字在顯示時(shí)會(huì)默認(rèn)調(diào)用toExponential()

var a = 5E10;
a;                    // 50000000000
a.toExponential();    // "5e+10"

var b = a * a;
b;                    // 2.5e+21

var c = 1 / a;
c;                    // 2e-11

因?yàn)閿?shù)字可以被Number對(duì)象包裹,所以數(shù)值可以調(diào)用Number.prototype的方法。

var a = 42.59;

a.toPrecision( 1 ); // "4e+1"
a.toPrecision( 2 ); // "43"
a.toPrecision( 3 ); // "42.6"
a.toPrecision( 4 ); // "42.59"
a.toPrecision( 5 ); // "42.590"
a.toPrecision( 6 ); // "42.5900"

你也可以不通過變量直接訪問這些方法,不過要注意.。因?yàn)?b>.是一個(gè)有效的數(shù)字字符,它會(huì)優(yōu)先被當(dāng)作數(shù)字的一部分。

// invalid syntax:
42.toFixed( 3 );    // SyntaxError

// these are all valid:
(42).toFixed( 3 );    // "42.000"
0.42.toFixed( 3 );    // "0.420"
42..toFixed( 3 );    // "42.000"

42.toFixed( 3 )是錯(cuò)誤的語法,因?yàn)?b>.被當(dāng)作數(shù)字的一部分。42..toFixed( 3 )中第一個(gè).被當(dāng)作數(shù)字的一部分,第二個(gè).被當(dāng)作屬性操作符。

也可以用科學(xué)計(jì)數(shù)法表示數(shù)字。

var onethousand = 1E3;                        // means 1 * 10^3
var onemilliononehundredthousand = 1.1E6;    // means 1.1 * 10^6

以下這個(gè)情況并非JavaScript獨(dú)有,任何采用二進(jìn)制浮點(diǎn)數(shù),依據(jù)IEEE 754都會(huì)如此

0.1 + 0.2 === 0.3; // false

這是因?yàn)橛枚M(jìn)制浮點(diǎn)表示 0.1 0.2 并不精確。為了解決這個(gè)問題,設(shè)置個(gè)輔助的數(shù)值進(jìn)行比較,這個(gè)值是2^-52 (2.220446049250313e-16),這個(gè)數(shù)值在ES6中為Number.EPSILON。

if (!Number.EPSILON) {
    Number.EPSILON = Math.pow(2,-52);
}

function numbersCloseEnoughToEqual(n1,n2) {
    return Math.abs( n1 - n2 ) < Number.EPSILON;
}

var a = 0.1 + 0.2;
var b = 0.3;

numbersCloseEnoughToEqual( a, b );                    // true
numbersCloseEnoughToEqual( 0.0000001, 0.0000002 );    // false
Number.MAX_SAFE_INTEGER // 9007199254740991 2^53-1
Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_SAFE_INTEGER // -9007199254740991
Number.MIN_VALUE // 5e-324

NaN是"not a number",不過更準(zhǔn)確的定義應(yīng)該是"invalid number","failed number",因?yàn)閷?shí)際上它還是個(gè)number。它出現(xiàn)在用算數(shù)操作符操作運(yùn)算元時(shí),并不是兩個(gè)都是數(shù)字的情形。

var a = 2 / "foo";        // NaN

typeof a === "number";    // true

我們知道

0 == false  // true
"" == false  // true

我們以為像NaN表示失敗的也會(huì)是false,實(shí)際上

var a = 2 / "foo";

a == NaN;    // false
a === NaN;    // false
a == a; // false 它連自己都不等于
+0 === -0; // true

NaN == false; // false
undefined == false; // false
null == false; // false

與之相比,undefinednull都是種類型,該類型的值都只有一種。undefined是聲明變量的默認(rèn)值。

var b = null
var c = null
b === c // true
var d = undefined
var e = undefined
d === e // true

Number.isNaN()代替isNaN()

var a = 2 / "foo";
var b = "foo";

a; // NaN
b; // "foo"

window.isNaN( a ); // true
window.isNaN( b ); // true 
if (!Number.isNaN) {
    Number.isNaN = function(n) {
        return (
            typeof n === "number" &&
            window.isNaN( n )
        );
    };
}

var a = 2 / "foo";
var b = "foo";

Number.isNaN( a ); // true
Number.isNaN( b ); // false

或者利用它自己都不等于自己的特點(diǎn)。

if (!Number.isNaN) {
    Number.isNaN = function(n) {
        return n !== n;
    };
}

數(shù)字還有個(gè)特殊的數(shù)值Infinity

var a = 1 / 0;    // Infinity
var b = -1 / 0;    // -Infinity
typeof b; // "number"

數(shù)字和數(shù)字對(duì)象

function foo(x) {
    x = x + 1;
    x; // 3
}

var a = 2;
var b = new Number( a ); // or equivalently `Object(a)`

foo( b );
console.log( b ); // 2, not 3

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

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

相關(guān)文章

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

    摘要:原文測(cè)試對(duì)象包裝基礎(chǔ)數(shù)據(jù)類型沒有屬性和方法,為了使用方法和函數(shù),就需要對(duì)應(yīng)的對(duì)象包裝它。注意,用構(gòu)造器構(gòu)造的對(duì)象,永遠(yuǎn)是。它們都是對(duì)象。它們都是非空字符串。 原文 You Dont Know JS: Types & Grammar 測(cè)試 console.log(1+ 2+2); console.log(1+ +2+2); console.log(A- B+2); console.log...

    KitorinZero 評(píng)論0 收藏0
  • [你不知道的 JavaScript 類型和語法] 第一章:類型

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

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

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

    princekin 評(píng)論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)簡(jiǎn)單的數(shù)組實(shí)現(xiàn)鏈表實(shí)現(xiàn)簡(jiǎn)單的數(shù)組實(shí)現(xiàn)解決使用棧或者隊(duì)列時(shí),的數(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 評(píng)論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ū)動(dòng)driver是mysql),在該MySqlConnection中主要有三件利器:IlluminateDatabaseMysqlConnector;IlluminateDatabaseQuery...

    zhou_you 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<