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

資訊專欄INFORMATION COLUMN

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

Drummor / 3433人閱讀

摘要:以下這個情況并非獨有,任何采用二進制浮點數,依據都會如此這是因為用二進制浮點表示并不精確。是,不過更準確的定義應該是,,因為實際上它還是個。是聲明變量的默認值。數字還有個特殊的數值數字和數字對象

原文

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對其操作后返回的也還是undefined

var a;

typeof a; // "undefined"

typeof b; // "undefined"

利用這點,我們可以做一些檢查而避免報錯

// 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" );
}

討論數組時,字符串類型的數字索引會直接被當作數字。

var a = [ ];

a["13"] = 42;

a.length; // 14

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

特別大或特別小的數字在顯示時會默認調用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

因為數字可以被Number對象包裹,所以數值可以調用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"

你也可以不通過變量直接訪問這些方法,不過要注意.。因為.是一個有效的數字字符,它會優先被當作數字的一部分。

// 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 )是錯誤的語法,因為.被當作數字的一部分。42..toFixed( 3 )中第一個.被當作數字的一部分,第二個.被當作屬性操作符。

也可以用科學計數法表示數字。

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

以下這個情況并非JavaScript獨有,任何采用二進制浮點數,依據IEEE 754都會如此

0.1 + 0.2 === 0.3; // false

這是因為用二進制浮點表示 0.1 0.2 并不精確。為了解決這個問題,設置個輔助的數值進行比較,這個值是2^-52 (2.220446049250313e-16),這個數值在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",不過更準確的定義應該是"invalid number","failed number",因為實際上它還是個number。它出現在用算數操作符操作運算元時,并不是兩個都是數字的情形。

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

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

我們知道

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

我們以為像NaN表示失敗的也會是false,實際上

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是聲明變量的默認值。

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

或者利用它自己都不等于自己的特點。

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

數字還有個特殊的數值Infinity

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

數字和數字對象

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89646.html

相關文章

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

    摘要:原文測試對象包裝基礎數據類型沒有屬性和方法,為了使用方法和函數,就需要對應的對象包裝它。注意,用構造器構造的對象,永遠是。它們都是對象。它們都是非空字符串。 原文 You Dont Know JS: Types & Grammar 測試 console.log(1+ 2+2); console.log(1+ +2+2); console.log(A- B+2); console.log...

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

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

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

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

    princekin 評論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元查看
<