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

資訊專欄INFORMATION COLUMN

JS重要知識(shí)點(diǎn)記錄(一)

HtmlCssJs / 644人閱讀

摘要:包裝對(duì)象即,與數(shù)值字符串布爾值相對(duì)應(yīng)的三個(gè)原生對(duì)象。顯示類型轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換即,顯示調(diào)用函數(shù)進(jìn)行類型轉(zhuǎn)換。返回對(duì)象的字符串?dāng)?shù)值或布爾值表示,通常與返回的值相同。

一、類型與包裝對(duì)象 1. 類型

原始類型:

number

string

boolean

null

undefined

Symbol

對(duì)象類型:

Object

Array

Function

原始類型(基本類型)和對(duì)象類型(引用類型)的區(qū)別:

原始類型不能修改值,對(duì)象類型可以。
分析:原始類型存儲(chǔ)在棧內(nèi)存中,對(duì)象類型存儲(chǔ)在堆內(nèi)存中。原始類型的修改都是重新賦值。
即,聲明一個(gè)原始類型,var a = 2;那么會(huì)在棧內(nèi)存中開(kāi)辟一塊內(nèi)存用于存儲(chǔ)原始類型a,當(dāng)重新賦值a = 234的時(shí)候,會(huì)重新開(kāi)辟一塊棧內(nèi)存用于存儲(chǔ)重新賦值的原始類型a,2則被垃圾回收機(jī)制回收。
至于對(duì)象類型,棧內(nèi)存中存的是對(duì)象數(shù)據(jù)在堆內(nèi)存中的首地址,也就是該數(shù)據(jù)的引用。在訪問(wèn)變量的時(shí)候就會(huì)去堆內(nèi)存中找引用對(duì)象的值,修改的時(shí)候也是修改堆內(nèi)存中的值。

原始類型沒(méi)有屬性和方法,對(duì)象類型可以有

null和undefined的區(qū)別:

undefined表示一個(gè)未被賦值的棧內(nèi)存的空間,null表示棧空間的引用沒(méi)有指向一個(gè)地址

進(jìn)行顯示類型轉(zhuǎn)換時(shí),null為0,undefined為NaN

typeof(null) === "object"
typeof(undefined) ==="undefined"

2. 包裝對(duì)象

包裝對(duì)象-by阮一峰/W3cschool(2019.1.4)
JS語(yǔ)言:“一切皆對(duì)象”,數(shù)組和函數(shù)本質(zhì)上是對(duì)象,三種原始數(shù)據(jù)類型的值(數(shù)值、字符串、布爾值
)在一定條件下、也會(huì)自動(dòng)轉(zhuǎn)為對(duì)象、這就是原始類型的“包裝對(duì)象”。
包裝對(duì)象:即,與數(shù)值、字符串、布爾值相對(duì)應(yīng)的Number、String、Boolean三個(gè)原生對(duì)象。三個(gè)原生對(duì)象可以把原始類型的值變成(包裝成)對(duì)象。

var num = new Number(123);
var str = new String("abc");
var bool = new Boolean(true);

例如:

var str = "test";//通過(guò)字符串字面量定義的字符串值不是對(duì)象
str.length  //4
str.slice(0,1) //"t"

var a = 7;
a.toString() //"7"

str是原始類型string的變量,進(jìn)行屬性和調(diào)用方法的操作時(shí),js會(huì)通過(guò)new String()構(gòu)建一個(gè)包裝對(duì)象(臨時(shí)的),這個(gè)包裝對(duì)象再進(jìn)行屬性和方法的訪問(wèn),訪問(wèn)結(jié)束后,js會(huì)銷毀該包裝對(duì)象,所以只能讀不能改。null和undefined沒(méi)有構(gòu)造函數(shù),所以也沒(méi)有包裝對(duì)象,如果訪問(wèn)其屬性和方法將會(huì)跑出異常。
補(bǔ)充:toString()方法是Number對(duì)象的方法,把數(shù)字轉(zhuǎn)換成字符串。

3. 類型轉(zhuǎn)換

JS是弱類型,無(wú)論什么類型都是通過(guò)var來(lái)聲明。
https://www.jb51.net/article/...
一定為false的值:

0或+0、-0,NaN //數(shù)值
"" //空字符串值
false //false布爾值
undefined
null

if (a && b)的正確理解方式是:a && b進(jìn)行表達(dá)式求值后,然后再轉(zhuǎn)換為Boolean類型。
☆ 顯示類型轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)
即,顯示調(diào)用String();Number();Boolean()函數(shù)進(jìn)行類型轉(zhuǎn)換。

var a = [9,8]//數(shù)組
    String(a)//"9,8"

var a = 123
String(a) // "123"
Boolean(a) // true
var b = "123a"
Number(b) // NaN
Boolean(b) // true

//引用類型顯示轉(zhuǎn)換為原始類型
var a = ["9"]
Number(a) // 9
String(a) // "9"
var b = {
c: "this is a time",
toString: function(){
return 5
}
}
Number(b) // 5
String(b) // "5"

☆ 隱式轉(zhuǎn)換(自動(dòng)轉(zhuǎn)換,用的比較多)原始類型的類型轉(zhuǎn)換,引用類型的轉(zhuǎn)換。
通過(guò)運(yùn)算符進(jìn)行轉(zhuǎn)換,例如:== + -
注意:===運(yùn)算符,是類型和數(shù)值都一樣,才能返回true
以==為例:
首先,null和undefined==其他類型都為false。

null == undefined只能跟自己和對(duì)方==返回true,其他情況是false;
可以進(jìn)行強(qiáng)制類型轉(zhuǎn)換:

var a = null
String(a)
a==null //強(qiáng)制類型轉(zhuǎn)換,并不會(huì)影響a本身的值,只是在運(yùn)算的時(shí)候不同

然后,原始類型之間的轉(zhuǎn)換,都是以構(gòu)造函數(shù)進(jìn)行轉(zhuǎn)換,即將==兩邊的值都轉(zhuǎn)換成Number再進(jìn)行比較
引用類型轉(zhuǎn)換為原始類型過(guò)程:
1.先調(diào)用valueOf()方法,如果返回原始類型,則結(jié)束,否則執(zhí)行下一步
2.接著調(diào)用toString()方法,得到初步原始類型(初步原始類型一定是一個(gè)非空字符串)
3.將得到的初步原始類型轉(zhuǎn)換為目標(biāo)原始類型

所有引?用類型的最頂層的proto對(duì)象(可以理解為基類),都為Object的prototype,其必包含toString方法,該方法返回?cái)?shù)據(jù)類型字符串,轉(zhuǎn)換為boolean為true,所以所有的對(duì)象都為true。

var a = {}, b = []
if(a) {}
if(b) {} // 不能通過(guò)這個(gè)?方式判定對(duì)象和數(shù)組為空,因?yàn)榭諗?shù)組或者空對(duì)象轉(zhuǎn)換成boolean值,都為true

原始類型的轉(zhuǎn)換:

“123” == false //false
“123” == true  //false

分析:true轉(zhuǎn)換為1了,false轉(zhuǎn)換成了0;“123”轉(zhuǎn)換成了123.
==符號(hào)會(huì)把兩邊都會(huì)類型轉(zhuǎn)換成Number,再進(jìn)行對(duì)比

var obj = {a:"123"}
console.dir()
obj.valueOf

☆ 拓展:
object類型具有valueOf()和toString()方法。valueOf()返回對(duì)象的字符串、數(shù)值或布爾值表示,通常與toString()返回的值相同。toString()返回對(duì)象的字符串表示。但是?。。。?shí)際上:
拿數(shù)組為例,toString方法返回的是由數(shù)組中每個(gè)值的字符串形式拼接而成的一個(gè)由逗號(hào)分隔的字符串;valueOf方法返回的還是一個(gè)數(shù)組。

☆ ==與===
== 判斷相等時(shí),如果兩邊類型不同時(shí),會(huì)進(jìn)行類型轉(zhuǎn)換
===(絕對(duì)等于號(hào)) 判斷相等時(shí),不進(jìn)行類型轉(zhuǎn)換,類型不同,其值?定不絕對(duì)等于
當(dāng)兩邊都為引用類型時(shí),== 和 === 都是判斷兩邊是否指向同?個(gè)數(shù)據(jù),是則為true,否則為
false

[] == [] // false
{} == {} // false
var a = b = {}
a == b // true
a === b // true

☆經(jīng)典面試題:設(shè)計(jì)一個(gè)函數(shù),讓a既等于1又等于2又等于3。
考的是類型轉(zhuǎn)換,原始類型肯定是不可以的。

題目:a為何值時(shí),下面表達(dá)式為true
if(a == 1 && a == 2 && a == 3){
//
}
答案:
var a = {
b: 0,
toString: function(){
return ++this.b
}
}      

原理:

4.類型判斷

1)typeof運(yùn)算符

typeof 1 // ‘number’
typeof NaN // "number"
typeof {} // "Object"
typeof null // "Object"
typeof undefined // "undefined"
var a = function(){}
typeof a // "function"

缺點(diǎn):typeof只能判斷原始類型和函數(shù),不能判斷引用類型和null,它們都返回"object".
2)instanceof
使用方法:對(duì)象 instanceof 構(gòu)造方法

[] instanceof Array // true
[] instanceof Object // true
var b = {}
b instanceof Object // true
var a = function(){}
a instanceof Function // true

原理:instanceof運(yùn)算符檢測(cè)左邊對(duì)象的原型鏈上是否有右邊構(gòu)造函數(shù)的prototype對(duì)象。
缺點(diǎn):
只能用來(lái)判斷對(duì)象;
不能跨iframe使用,因?yàn)椴煌琲frame其window不同.
3)constructor

[].constructor === Array // true
"123".constructor === String // true
function Fn(){
}
var f = new Fn()
f.constructor === Fn // true

原理:構(gòu)造函數(shù)的prototype對(duì)象指向構(gòu)造函數(shù)本身,創(chuàng)建新對(duì)象后,新對(duì)象繼承prototype對(duì)象,因此新對(duì)象的constructor指向了構(gòu)造函數(shù)。
缺點(diǎn):不能用來(lái)判斷null、undefined;
prototype對(duì)象可被重寫,constructor會(huì)丟失。
4)toString——最通用的方法
toString是Object的原型?方法,默認(rèn)返回當(dāng)前對(duì)象的類型,對(duì)所有情況都可以判斷。

Object.prototype.toString.call("1234") // ["Object String"]
Object.prototype.toString.call([]) // ["Object Array"]
Object.prototype.toString.call({}) // ["Object Object"]
Object.prototype.toString.call(null) // ["Object Null"]
Object.prototype.toString.call(undefined) // ["Object Undefined"]

5)其他判斷方法

Array.isArray([]) // true
isNaN(NaN) // true 

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

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

相關(guān)文章

  • JS筆記

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開(kāi)發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計(jì)模式力薦深度好文深入理解大設(shè)計(jì)模式收集各種疑難雜癥的問(wèn)題集錦關(guān)于,工作和學(xué)習(xí)過(guò)程中遇到過(guò)許多問(wèn)題,也解答過(guò)許多別人的問(wèn)題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱為惰性加載,即在長(zhǎng)網(wǎng)頁(yè)中延遲加載圖像。用戶滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...

    caikeal 評(píng)論0 收藏0
  • 理解JavaScript的核心識(shí)點(diǎn):This

    摘要:關(guān)鍵字計(jì)算為當(dāng)前執(zhí)行上下文的屬性的值。毫無(wú)疑問(wèn)它將指向了這個(gè)前置的對(duì)象。構(gòu)造函數(shù)也是同理。嚴(yán)格模式無(wú)論調(diào)用位置,只取顯式給定的上下文綁定的,通過(guò)方法傳入的第一參數(shù),否則是。其實(shí)并不屬于特殊規(guī)則,是由于各種事件監(jiān)聽(tīng)定義方式本身造成的。 this 是 JavaScript 中非常重要且使用最廣的一個(gè)關(guān)鍵字,它的值指向了一個(gè)對(duì)象的引用。這個(gè)引用的結(jié)果非常容易引起開(kāi)發(fā)者的誤判,所以必須對(duì)這個(gè)關(guān)...

    TerryCai 評(píng)論0 收藏0
  • 前端實(shí)習(xí)面試的些建議

    摘要:作者今年大三,在春招過(guò)程中參加了多家大公司的面試后,拿到了騰訊的前端實(shí)習(xí),在這里做一些總結(jié),希望給還未參加過(guò)實(shí)習(xí)面試的同學(xué)一些幫助。在之后的面試時(shí)就更加從容一些了。 作者今年大三,在春招過(guò)程中參加了多家大公司的面試后,拿到了騰訊的前端實(shí)習(xí) offer,在這里做一些總結(jié),希望給還未參加過(guò)實(shí)習(xí)面試的同學(xué)一些幫助。 一、簡(jiǎn)歷的準(zhǔn)備 簡(jiǎn)歷制作是很重要的一個(gè)環(huán)節(jié),一份好的簡(jiǎn)歷會(huì)給面試官留下很不錯(cuò)...

    Rango 評(píng)論0 收藏0
  • 2019.7.15 - 7.21 我們 36人都學(xué)了些什么?

    摘要:作者陳大魚頭如果不希望職業(yè)生涯過(guò)早結(jié)束,持續(xù)學(xué)習(xí)對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是必不可少的。最近前端面試之道的作者為了讓一些人能在這塊地方記錄自己學(xué)習(xí)到的內(nèi)容而建立起了一個(gè)學(xué)習(xí)倉(cāng)庫(kù)。例子如下我們首先定義一個(gè)文件叫,一個(gè)文件叫。 作者:陳大魚頭 github: KRISACHAN 如果不希望職業(yè)生涯過(guò)早結(jié)束,持續(xù)學(xué)習(xí)對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是必不可少的。 最近《前端面試之道》的作者為了讓一些人能在這塊地方記...

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

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

0條評(píng)論

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