初識(shí)JavaScript

一营勤、數(shù)據(jù)類型:

原始類型: 引用類型
null object
undefined function
number
string
boolean

NAN也是數(shù)據(jù)類型宪巨,表示數(shù)據(jù)不應(yīng)該存在确沸。例如0/0的計(jì)算結(jié)果土陪,就是NAN

typeof(xx)的返回值即為基本數(shù)據(jù)類型春寿,而這些數(shù)據(jù)類型顯示都是字符串類型

typeof("1")//返回string
typeof "1"http://也可以直接加空格再接參數(shù),效果與加括號(hào)一樣返回的也是string

原生JS里光坝,只有手動(dòng)賦值給一個(gè)變量null,才會(huì)產(chǎn)生null
未賦值的變量都是undefined

表達(dá)式一種數(shù)據(jù)尸诽,數(shù)據(jù)內(nèi)容為表達(dá)式的計(jì)算結(jié)果
賦值表達(dá)式也是數(shù)據(jù)

console.log(a = 1 +  9 + 9)//結(jié)果為19

對(duì)象:

var obj = {
 0:"number",
name:"daming",
'age':28,
sun:{
  name:"xiaoming",
  age:2
  }
}
console.log(obj[0]) //number

js會(huì)把數(shù)字屬性,自動(dòng)轉(zhuǎn)化為字符串盯另。

四性含、顯式類型轉(zhuǎn)換

--
Number(mix)
parseInt(string,radix)
parseFloat(string)
String(mix)
toString(radix)
Boolean()

1.Number(mix)把字符串轉(zhuǎn)換成數(shù)字。

Number(-123) // -123
Number(2.22) // 2.22
Number(null) // 0
Number(undefined) // NAN
Number("a") // NAN
Number("123abc") // NAN

2.parseInt(string,radix)把參數(shù)轉(zhuǎn)化成整數(shù)鸳惯,并向下取整商蕴。

parseInt(1.1) // 1
parseInt(1.9) // 1
parseInt("-123.3") // -123
console.log(parseInt("0.1") === parseInt("-0.1")) // true

parseInt(string,radix)有兩個(gè)參數(shù),默認(rèn)第二個(gè)參數(shù)為10進(jìn)制芝发。該函數(shù)的意思是:radix進(jìn)制的string绪商,輸出其在10進(jìn)制下的結(jié)果

console.log(parseInt(10,16) ) // 16 把10轉(zhuǎn)化為16進(jìn)制,結(jié)果就是16
//意思是辅鲸,十六進(jìn)制的10格郁,在10進(jìn)制下,結(jié)果為16独悴。
console.log(parseInt("b",16)) // 11
//十六進(jìn)制的b理张,在10進(jìn)制下,結(jié)果為11
//當(dāng)參數(shù)為:不填 绵患、字符串空、null悟耘、undefined落蝙、"abc" 、"123abc"之類的無(wú)法轉(zhuǎn)化為數(shù)字的內(nèi)容時(shí)時(shí)暂幼,
//返回NAN

3.parseFloat(string)parseInt類似筏勒。只是把參數(shù)轉(zhuǎn)化為float類型。好處是不會(huì)像OC一樣有浮動(dòng)旺嬉。

parseFloat("0.11a") // 0.11
parseFloat(123) // 123
//支持負(fù)數(shù)

4. String()把參數(shù)轉(zhuǎn)化成字符串管行。能把輸入的任意內(nèi)容轉(zhuǎn)化成字符串。包括undefined null NAN邪媳。
5.toString() 用法跟String()有些區(qū)別捐顷。
toString()參數(shù)在前荡陷,一般用于把對(duì)象轉(zhuǎn)化成字符串:object.toString()
String(Object)參數(shù)在中
兩者區(qū)別在于
1.toString()不能把null,undefined,NAN作為參數(shù)。而String()可以把上述3個(gè)直接轉(zhuǎn)化成字符串迅涮。
2.不能直接111.toString()废赞。但是可以

var number = 111 
number.toString()

toString()還可以像parseInt()進(jìn)行進(jìn)制轉(zhuǎn)換。

var number1 = 10
var number2 = number1.toString(16)
console.log(number2)
// a

但是這里有一些細(xì)節(jié)要注意:
1:
object.toString(redix)十進(jìn)制的object叮姑,輸出其在redix進(jìn)制下的結(jié)果唉地。
parseInt(object,radix):radix進(jìn)制的object,輸出其在10進(jìn)制下的結(jié)果传透。
2:
toString()對(duì)象方法耘沼。所以前不能直接跟數(shù)字,例如1.toString()就會(huì)報(bào)錯(cuò)朱盐。但是如上例一樣群嗤,先把Number類型賦值給變量number1。就可以使用托享。同理boolean類型也會(huì)報(bào)錯(cuò)骚烧。

6.Boolean() 有實(shí)際意義的參數(shù),結(jié)果都是true闰围。包括函數(shù)赃绊,對(duì)象。undefined null NAN返回fasle

五羡榴、隱式類型轉(zhuǎn)換

-- 隱式轉(zhuǎn)換
isNAN() Number()
++/-- +/-(正負(fù)符號(hào)如-1) Number()
+(加號(hào)) 只要前后有字符串存在碧查,就都拼接成字符串
- * / % Number()
&& !|| Boolean()
< > <= >= 如果比較左右有數(shù)字校仑,就會(huì)把不是數(shù)字的一端轉(zhuǎn)化為數(shù)字忠售。Number()
== != 如果比較左右有數(shù)字迄沫,就會(huì)把不是數(shù)字的一端轉(zhuǎn)化為數(shù)字稻扬。Number()
=== !== 不發(fā)生類型轉(zhuǎn)換

isNAN(object) 內(nèi)部會(huì)先把object進(jìn)行Number(object)轉(zhuǎn)換,在拿結(jié)果與NAN進(jìn)行比較羊瘩。如果是NAN,則返回true尘吗。

console.log(isNAN(null)) // false
console.log(isNAN(undefined)) // true
console.log(isNAN("123")) // fasle
console.log(isNAN("abc")) // true

1 > 2 > 3
會(huì)先進(jìn)行1 > 2 再把結(jié)果 > 3;

console.log(undefined == null) //ture
console.log(NAN == NAN) //fasle
console.log(typeof(a)) //console一個(gè)未定義的變量黔宛,只有這種情況不會(huì)報(bào)錯(cuò)臀晃,結(jié)果為字符串"undefined".

六:立即執(zhí)行函數(shù)(匿名函數(shù)):

(function() {}) ()
(function() {} ())

作用是避免全局污染积仗,強(qiáng)行改變作用域哎迄。

正常的函數(shù)調(diào)用的方法為:

function fun() {
}
fun()

但是如果這樣寫(xiě),就會(huì)報(bào)錯(cuò)隆圆。

function fun() {
}()

因?yàn)?function 可以是語(yǔ)句或者表達(dá)式

//語(yǔ)句
function fun(){
};
//表達(dá)式
var fun = function (){
};

為了避免解析上的歧義漱挚,JS規(guī)定,如果function出現(xiàn)在行首渺氧,一律解析成語(yǔ)句旨涝。

因此JS看到行首是function關(guān)鍵字以后,認(rèn)為這一段都是函數(shù)定義侣背,不應(yīng)該以原括號(hào)結(jié)尾白华,所以就報(bào)錯(cuò)了。

七:this

  • 在函數(shù)中使用this贩耐,它的指向完全取決于函數(shù)是如何被調(diào)用的

    調(diào)用方式 示例 函數(shù)中的this指向
    通過(guò)new調(diào)用 new method() 新對(duì)象
    直接調(diào)用 method() 全局對(duì)象
    通過(guò)對(duì)象調(diào)用 obj.method() 前面的對(duì)象
    call method.call(ctx) call的第一個(gè)參數(shù)
    apply method.apply(ctx) apply的第一個(gè)參數(shù)
  • call函數(shù)的理解

function func(e) {
  console.log(this)
};

var obj = {
  func2: function () { 
  }
}

func.call(obj)//{ func2: [Function: func2] }
//立即執(zhí)行func()函數(shù)弧腥,但把func函數(shù)里的this指向obj.
  • 偽數(shù)組轉(zhuǎn)數(shù)組:
var obj = {
  0: 'a',
  1: 'b',
  2: 'c',
  length:3
}
console.log(Array.prototype.slice.call(obj))//[ 'a', 'b', 'c' ]

要理解這個(gè)轉(zhuǎn)換,需要先理解slice()的實(shí)際執(zhí)行含義潮太。

var arr = ['a', 'b', 'c']
console.log(arr.slice(1, 2))//[ 'b']
slice方法在上述語(yǔ)句中的的意思是:
對(duì)arr這個(gè)數(shù)組取其length為2的部分管搪。從下標(biāo)1開(kāi)始讀,每讀到一個(gè)數(shù)據(jù)铡买,就添加到數(shù)組中更鲁,最終返回這個(gè)數(shù)組。

理解了slice()方法奇钞,就能完全理解上述轉(zhuǎn)換的原理了:
call()方法澡为,把slice()里的this指向obj(因?yàn)閛bj是對(duì)象,沒(méi)有slice()方法)景埃。然后slice會(huì)取objlength,得到的結(jié)果是3媒至。然后從下標(biāo)0開(kāi)始讀,一直讀到長(zhǎng)度3結(jié)束纠亚。把讀到的結(jié)果,添加到數(shù)組中筋夏,并返回蒂胞。

假如把上述obj改為:

var obj = {
  0: 'a',
  2: 'c',
  3: 'c',
  length:3
}
console.log(Array.prototype.slice.call(obj))//['a', empty, 'c']

八:構(gòu)造函數(shù)

function Obj (name,age) {
this.name = name,
this.age = age,
this.sayHi = function() {
console.log(this.name+this.age)
  }
}

var obj = new Obj('lili',18)
obj.sayHi();

因此可以看出,其實(shí)每個(gè)對(duì)象都是一個(gè)函數(shù)条篷。每個(gè)函數(shù)也都是一個(gè)對(duì)象骗随。

九:原型鏈

原型:

每個(gè)函數(shù)都會(huì)自動(dòng)附帶一個(gè)屬性prototype蛤织,這個(gè)屬性的值是一個(gè)普通對(duì)象,稱之為原型對(duì)象鸿染。
每個(gè)實(shí)例都擁有一個(gè)特殊的屬性__proto__指蚜,稱之為隱式原型,它指向構(gòu)造函數(shù)的原型
當(dāng)訪問(wèn)實(shí)例成員時(shí)涨椒,先找自身摊鸡,如果不存在,會(huì)自動(dòng)從隱式原型中尋找
這樣一來(lái)蚕冬,我們可以把那些公共成員免猾,放到函數(shù)的原型中,即可被所有實(shí)例共享
hasOwnProperty判斷一個(gè)屬性是在自身而不是在原型上囤热。
in判斷屬性是不是在該對(duì)象自身或者原型上猎提。

var obj = {a:1}
Object.prototype.b = 2;
console.log('a' in obj)//true
console.log('b' in obj)//true

原型鏈:

  1. instanceof關(guān)鍵字【常用】

    object instanceof constructor
    // 判斷object的原型鏈中,是否存在constructor的原型
    

創(chuàng)建空原型的對(duì)象旁蔼。

  1. 利用Object.create()

    Object.create(target);
    // 返回一個(gè)新對(duì)象锨苏,新對(duì)象以target作為隱式原型
    
  2. 利用Object.setPrototypeOf()

    Object.setPrototypeOf(obj, prototype);
    // 設(shè)置obj的隱式原型為prototype
    

十:繼承

function inherit(Child, Parent){
  //改變?cè)玩溂纯蓪?shí)現(xiàn)繼承。
  Object.setPrototypeOf(Child.prototype, Parent.prototype);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棺聊,一起剝皮案震驚了整個(gè)濱河市伞租,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躺屁,老刑警劉巖肯夏,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異犀暑,居然都是意外死亡驯击,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)耐亏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)徊都,“玉大人,你說(shuō)我怎么就攤上這事广辰∠窘茫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵择吊,是天一觀的道長(zhǎng)李根。 經(jīng)常有香客問(wèn)我,道長(zhǎng)几睛,這世上最難降的妖魔是什么房轿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上囱持,老公的妹妹穿的比我還像新娘夯接。我一直安慰自己,他們只是感情好纷妆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布盔几。 她就那樣靜靜地躺著,像睡著了一般掩幢。 火紅的嫁衣襯著肌膚如雪逊拍。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天粒蜈,我揣著相機(jī)與錄音顺献,去河邊找鬼。 笑死枯怖,一個(gè)胖子當(dāng)著我的面吹牛注整,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播度硝,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肿轨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蕊程?” 一聲冷哼從身側(cè)響起椒袍,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藻茂,沒(méi)想到半個(gè)月后驹暑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辨赐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年优俘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掀序。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帆焕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出不恭,到底是詐尸還是另有隱情叶雹,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布换吧,位于F島的核電站折晦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沾瓦。R本人自食惡果不足惜满着,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一打颤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漓滔,春花似錦、人聲如沸乖篷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撕蔼。三九已至豁鲤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鲸沮,已是汗流浹背琳骡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讼溺,地道東北人楣号。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像怒坯,于是被迫代替她去往敵國(guó)和親炫狱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容