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

資訊專欄INFORMATION COLUMN

1. 重新認(rèn)識(shí) JavaScript 類型

Drinkey / 945人閱讀

摘要:重新認(rèn)識(shí)類型數(shù)據(jù)類型重學(xué)前端系列筆記前言最新在看大神的專欄重學(xué)前端,感慨頗多,收益也頗多。實(shí)際上是能夠表示的最小精度。也可以是對(duì)象類型這個(gè)類型是新增的一個(gè)類型。主要用于解釋字符集等。

title: 1. 重新認(rèn)識(shí) JavaScript 類型
date: 2019-03-27 11:12:47 +0800
tags: [JavaScript數(shù)據(jù)類型]
categories: 重學(xué)前端系列筆記

前言

最新在看witter大神的專欄《重學(xué)前端》,感慨頗多,收益也頗多。覺得自己該重建一下前端的知識(shí)體系,所以跟著寫下這個(gè)筆記。

補(bǔ)充*

變量聲明跟賦值,是兩個(gè)概念。

let a?是屬于變量聲明階段,這個(gè)階段所有的變量的值都是 undefined?。a = 12JS**?解析引擎。這個(gè)變量是什么類型以及它的值多少。

當(dāng) JavaScript?執(zhí)行的時(shí)候,如果遇到致命錯(cuò)誤便會(huì)停止往下執(zhí)行。

//bad聲明方式
var a=b=2;
// good
var a=12,b=23;
// 但是更期望使用let聲明,不用變量提升
let a = 12;

怎么準(zhǔn)確的判斷數(shù)據(jù)類型
let str = "你是誰,我是戰(zhàn)無不勝的孫悟空"
Object.prototype.toString.call(str) // [object,String];
let arr = [1,4,56];
Object.prototype.toString.call(arr) // [object,Array];

JavaScript現(xiàn)有常見類型

Null

Undefined

String

Boolean

Number

Symbol

Object

現(xiàn)在JavaScript常見類型是這么多,其中只有 Symbol? 是 ES6?新提出來的,其余都是 ES6?之前早就熟悉的類

(0)Null

這個(gè)類型表示:定義了但是為空

Null 類型也只有一個(gè)值,就是 null,它的語(yǔ)義表示空值,與 undefined 不同,null 是 JavaScript 關(guān)鍵字,所以在任何代碼中,你都可以放心用 null 關(guān)鍵字來獲取 null 值。

(1)Undefined

這個(gè)類型表示:變量定義了但是未賦值

任何變量在賦值前是 Undefined 類型、值為 undefined,一般我們可以用全局變量 undefined(就是名為 undefined 的這個(gè)變量)來表達(dá)這個(gè)值

它同樣的表示一個(gè)變量的值,它并非一個(gè)關(guān)鍵詞,這是 JavaScript? 語(yǔ)言公認(rèn)的設(shè)計(jì)失誤之一,所以,所以,我們?yōu)榱吮苊鉄o意中被篡改,我建議使用 void 0?來來獲取 Nudefined?值。

它與 Null?的不同就是,Null?是 JavaScript?的關(guān)鍵字,在開發(fā)中可以自由的獲取 Null?類型的變量

(2)Boolean

這個(gè)類型表示:邏輯上的真和假

它有兩個(gè)值:true?和 false?

它屬于 JavaScript?中的內(nèi)置對(duì)象,可以通過 new?關(guān)鍵詞創(chuàng)造實(shí)例對(duì)象

(3)String

這個(gè)類型表示:表示文本數(shù)據(jù)

這個(gè)類型具有長(zhǎng)度單位的,最大的長(zhǎng)度 2^53-1?,

這個(gè) String?并非文本意義的字符串,而是字符串的 UTF16?編碼,我們?nèi)粘2僮髯址褂玫?length?charAt?都是針對(duì) UTF16?編碼

字符串的最大長(zhǎng)度是受經(jīng)過 UTF16?編碼之后的字符長(zhǎng)度限制

補(bǔ)充編碼知識(shí)
Note:現(xiàn)行的字符集國(guó)際標(biāo)準(zhǔn),字符是以 Unicode 的方式表示的,每一個(gè) Unicode 的碼點(diǎn)表示一個(gè)字符,理論上,Unicode 的范圍是無限的。UTF 是 Unicode 的編碼方式,規(guī)定了碼點(diǎn)在計(jì)算機(jī)中的表示方法,常見的有 UTF16 和 UTF8。 Unicode 的碼點(diǎn)通常用 U+??? 來表示,其中 ??? 是十六進(jìn)制的碼點(diǎn)值。 0-65536(U+0000 - U+FFFF)的碼點(diǎn)被稱為基本字符區(qū)域(BMP)。

(4)Number

這個(gè)類型表示:通常意義的數(shù)字類型

它是 JavaScript?的內(nèi)置對(duì)象,可以通過 new?關(guān)鍵字創(chuàng)造實(shí)例

它類型有 **2^64-2^53+3**?個(gè)值

在為了避免計(jì)算的時(shí)候出錯(cuò),借鑒生活中的數(shù)學(xué),引入了 NaN?(這個(gè)可以用來檢測(cè)是否為數(shù)字類型)、Infinity(正無窮大)、-Infinity(負(fù)無窮大)

在加減法中 -0+0 **沒有很大的區(qū)別,但是在除法中就會(huì)很大的區(qū)別了

console.log(.00001 / -0); //結(jié)果:-Infinity
console.log(.00000000001 / 0); //結(jié)果: Infinity

根據(jù)雙精度浮點(diǎn)數(shù)的定義,Number 類型中有效的整數(shù)范圍是-0x1fffffffffffff 至0x1fffffffffffff,所以 Number 無法精確表示此范圍外的整數(shù)。所以在非整數(shù)面前是無法使用 ==?或者 ===?進(jìn)行比較的

console.log( .1 + .2 == .3 ); //結(jié)果:false;
console.log(.1 + .2);  // 結(jié)果:0.30000000000000004

正確的比較兩邊數(shù)值是否相等,應(yīng)該比較左右兩邊差的絕對(duì)值是否小于最小精度

console.log(Math.abs(.1 + .2 - .3) <=Number.EPSILON); // true
Number.EPSILONES6?Number 的一個(gè)常量。
Number.EPSILON?實(shí)際上是 JavaScript 能夠表示的最小精度。誤差如果小于這個(gè)值,就可以認(rèn)為已經(jīng)沒有意義了,即不存在誤差了。

(5)Object

這個(gè)類型表示:對(duì)象,它是一切有形和無形物體的總稱

它是屬性的集合,是 key-value?結(jié)構(gòu)

key : 可以是字符串類型。也可以是symbol類型

value :可以是字符串,可以是數(shù)值類型。也可以是對(duì)象類型

(6)Symbol

這個(gè)類型是 **ES6**?新增的一個(gè)類型。其實(shí)說實(shí)話,到現(xiàn)在還不太清楚這個(gè)類型的作用,以及用法

它是一切非字符串的對(duì)象 key 的集合

Symbol 可以具有字符串類型的描述,但是即使描述相同,Symbol 也不相等

// 創(chuàng)建 Symbol 類型
let symbol = Symbol("其實(shí),我是一個(gè)好人");
console.log(symbol)

這個(gè)類型還是有很多不懂,之后有了新收獲,再過來更新吧

類型轉(zhuǎn)換

(0)string → Number(字符串轉(zhuǎn)成數(shù)值類型)

常見都是借助 JavaScript?中的內(nèi)置方法進(jìn)行轉(zhuǎn)換,例如 **parseInt**? **parseFloat**?都是將字符串轉(zhuǎn)化成數(shù)值類型。但是? **parseInt**?是遇到非數(shù)值就停下,而??**parseFloat**?遇到不屬于數(shù)字行列才會(huì)停,

**parseInt**?**parseFloat**??轉(zhuǎn)化的字符串,如果第一個(gè)字符不是數(shù)字的話,就會(huì)返回?NaN

除了上述的兩種,還有 JavaScriptMath? NaN?

還有一種就是利用裝箱操作,利用 NumberNaN**

如果字符串的字符都是數(shù)字。那么可以使用四則運(yùn)算,也可以進(jìn)行隱士轉(zhuǎn)換

 console.log(parseInt("6340.54")); // 結(jié)果:6340
 console.log(parseFloat("4.648781655wr我是1"));結(jié)果:4.648781655
 console.log(Number("2.2.22")); // 結(jié)果:NaN
 console.log(Number("5464646")) // 結(jié)果: 5464646

(1)Number → string (數(shù)字轉(zhuǎn)化成字符串)

字符串拼接

let str = 121343454545;
str = str+ "";
console.log(typeof(str)) // 結(jié)果:string

裝箱轉(zhuǎn)換

let str = 13243545646;
console.log( typeof( String(str) ) ) // 結(jié)果:string 

(2)裝箱操作轉(zhuǎn)換

**JavaScript**?中,類型之間存在裝箱轉(zhuǎn)換操作

 let str = 1323;
 console.log(typeof (String(str))); // string
 console.log(typeof (Symbol(str))) // symbol

其他的數(shù)據(jù)類型

List? 和? Record?: 用于描述函數(shù)傳參過程。

**Set**?:主要用于解釋字符集等。

Completion Record?:用于描述異常、跳出等語(yǔ)句執(zhí)行過程。

Reference?:用于描述對(duì)象屬性訪問、delete 等。

Property Descriptor?:用于描述對(duì)象的屬性。

Lexical Environment? 和? Environment Record?:用于描述變量和作用域。

Data Block?:用于描述二進(jìn)制數(shù)據(jù)。

程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu)

始發(fā)于

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

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

相關(guān)文章

  • 第一天 重新認(rèn)識(shí)JavaScript

    摘要:使用表明你的比較不會(huì)涉及任何的隱形的類型轉(zhuǎn)換。當(dāng)對(duì)不同類型的數(shù)據(jù)進(jìn)行比較的時(shí)候你要首先把它們進(jìn)行顯示的類型轉(zhuǎn)換。然后再進(jìn)行比較這樣會(huì)使你的程序更加清晰。 1、JavaScript 嚴(yán)格模式 通過在程序最開始假如一個(gè)字符串字面量 use strict ,即可開啟嚴(yán)格模式 嚴(yán)格模式可以讓JS代碼擁有更好的兼容性,更強(qiáng)的健壯性 在嚴(yán)格模式下,重新聲明 arguments 會(huì)報(bào)錯(cuò),非嚴(yán)格模式...

    fizz 評(píng)論0 收藏0
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(四): 適配器模式

    摘要:什么是適配器模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。中的適配器模式在前端項(xiàng)目中,適配器模式的使用場(chǎng)景一般有以下三種情況庫(kù)的適配參數(shù)的適配和數(shù)據(jù)的適配。 1 什么是適配器模式 適配器模式(Adapter):將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。 在...

    URLOS 評(píng)論0 收藏0
  • JS對(duì)象(1)重新認(rèn)識(shí)面向?qū)ο?/b>

    摘要:對(duì)象重新認(rèn)識(shí)面向?qū)ο竺嫦驅(qū)ο髲脑O(shè)計(jì)模式上看,對(duì)象是計(jì)算機(jī)抽象現(xiàn)實(shí)世界的一種方式。除了字面式聲明方式之外,允許通過構(gòu)造器創(chuàng)建對(duì)象。每個(gè)構(gòu)造器實(shí)際上是一個(gè)函數(shù)對(duì)象該函數(shù)對(duì)象含有一個(gè)屬性用于實(shí)現(xiàn)基于原型的繼承和共享屬性。 title: JS對(duì)象(1)重新認(rèn)識(shí)面向?qū)ο? date: 2016-10-05 tags: JavaScript 0x00 面向?qū)ο?從設(shè)計(jì)模式上看,對(duì)象是...

    superw 評(píng)論0 收藏0
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式: 裝飾器模式

    摘要:什么是裝飾器模式向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)的設(shè)計(jì)模式被稱為裝飾器模式,它是作為現(xiàn)有的類的一個(gè)包裝。中的裝飾器模式中有一個(gè)的提案,使用一個(gè)以開頭的函數(shù)對(duì)中的及其屬性方法進(jìn)行修飾。 1 什么是裝飾器模式 showImg(https://segmentfault.com/img/remote/1460000015970102?w=1127&h=563); 向一個(gè)現(xiàn)有的對(duì)...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<