JavaScript自學(xué)筆記--基礎(chǔ)部分1

1、基本常識(shí)

瀏覽器的組成:1)shell部分

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2)內(nèi)核部分:(1)渲染引擎(語(yǔ)法規(guī)則和渲染)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)js引擎

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (3)其他模塊

JS特點(diǎn):1)解釋性語(yǔ)言

? ? ? ? ? ? ? ? 2)單線程(同步、異步)

? ? ? ? ? ? ? ? 3)ECMA標(biāo)注

JS執(zhí)行隊(duì)列:輪轉(zhuǎn)時(shí)間片(類(lèi)似吃法)

主流瀏覽器? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 內(nèi)核

IE? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????trident

Chrome? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? webkit/blink

firefox? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Gecko

Opera? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? presto????

Safari? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?webkit

2、基本語(yǔ)法


1、數(shù)據(jù)類(lèi)型:1)原始值:Number? ? Boolean? ? String? ? undefined? ? null

? ? ? ? ? ? ? ? ? ? ? ? ? ?2)引用值:array? ? Object? ? function? ? ...date? ? RegExp


2、"+"的作用:1)數(shù)學(xué)運(yùn)算? ? 2)字符串鏈接:任何數(shù)據(jù)類(lèi)型加字符串都等于字符串


3、邏輯運(yùn)算符:? ? &&? ? ||? ? !

????????3.1? ? &&運(yùn)算符:只有前后兩個(gè)表達(dá)式的情況,如果第一個(gè)表達(dá)式的結(jié)果為true,那么直接返回第二個(gè)表達(dá)式的結(jié)果。如果第一個(gè)表達(dá)式的結(jié)果為false時(shí),直接返回第一個(gè)表達(dá)式的值(undefined、null、NaN、""、0、false的布爾值為false)。

? ?具體應(yīng)用:短路語(yǔ)句

? ? ? var data = ...;

? ? ? data????&&? ? function(data)

????????3.2? ? ||運(yùn)算符:只有前后兩個(gè)表達(dá)式的情況,如果第一個(gè)表達(dá)式的結(jié)果為true,那么直接返回第一個(gè)表達(dá)式的結(jié)果。遇見(jiàn)true就返回。

具體應(yīng)用:瀏覽器兼容問(wèn)題(IE瀏覽器和非IE瀏覽器的兼容)

div.onclick = function(e) {

var event = e || window.event;

}

????????3.3? ? !運(yùn)算符:轉(zhuǎn)換成布爾值再取反


4、if? ? ?else? ? for

通過(guò)幾個(gè)實(shí)例來(lái)了解。

計(jì)算2的N次冪

????var n = parseInt(window.prompt('輸入:'));

????var count = 1;

????if (n == 0) {????????console.log(count);????} else {? ? ? ??

? ? for (var i = 1; i <= n; i++) {????????????count *= 2;????????}????????

? ?console.log(count);????}

遞歸計(jì)算N的階乘

function factorial(number) {?

?if (number == 0 || number == 1) {????????????return 1;????????}

else {????????????return number * factorial(number - 1);????????}?

}


斐波那契額數(shù)列

var n = parseInt(window.prompt('輸入:'));????

var? ?first = 1,

????????second = 1,

????????third;????

if (n == 1 || n == 2) {????????console.log("1");????}

else if (n >= 3) {

????????for (var i = 0; i < n - 2; i++)

????????????????{third = first + second;???????????

?????????????????first = second;????????????

????????????????second = third;}????????

console.log(third);????}

反向輸出一個(gè)三位數(shù)

var num = window.prompt("輸入:");

var str = "";?

for (var i = num.length - 1; i >= 0; i--){

?str +=i;????????}

console.log(str);


條件語(yǔ)句補(bǔ)充

switch case

var date = window.prompt('input');

switch(date) {

case "monday":

case "tuesday":

case "wednesday":

case "thursday":

case "friday":

? ? ? ? console.log("working");

? ? ? ? break;

case "saturday":

case "sunday":

? ? ? ? console.log("relaxing");

? ? ? ? break;

}

break:終止循環(huán)

continue:終止本次循環(huán),進(jìn)行下一個(gè)循環(huán)

5、typeof操作符:返回?cái)?shù)據(jù)是什么類(lèi)型的????????類(lèi)型轉(zhuǎn)換

? ? ? ? 5.1????六種數(shù)據(jù)類(lèi)型:number、string、boolean、undefined、object、function

? ? ? ? 5.2????顯示類(lèi)型轉(zhuǎn)化

? ? ? ? ? ? ? ? 1)String(mix)、Boolean(mix)、Number(mix):把對(duì)象轉(zhuǎn)換成字符串/布爾/數(shù)字類(lèi)型

? ? ? ? ? ? ? ? 2)parseInt(string,radix):1)把對(duì)象轉(zhuǎn)換成整型數(shù)字

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2)有兩個(gè)參數(shù)的時(shí)候,以目標(biāo)進(jìn)制(第二個(gè)參數(shù))為基底,轉(zhuǎn)化成10進(jìn)制

? ? ? ? ? ? ? ? 3)parseFloat(只有一個(gè)參數(shù)):把對(duì)象轉(zhuǎn)換成浮點(diǎn)類(lèi)型數(shù)字

? ? ? ? ? ? ? ?4)toString(radix):1)把對(duì)象轉(zhuǎn)換成字符串,用法與String不同? ? ? ? xxx.toString();

? ? ? ? ? ? ? ????????? ? ? ????????? ? ? ? ????????? ? undefined和null不能用toString方法

? ? ? ? ? ? ? ? ????????? ? ? ? ? ????????????? ????2)以10進(jìn)制為基底,轉(zhuǎn)化成目標(biāo)進(jìn)制(參數(shù))

? ? ? ? 5.3隱式類(lèi)型轉(zhuǎn)化(內(nèi)部都是調(diào)用顯示類(lèi)型轉(zhuǎn)化)

? ? ? ? ? ? ? ? 1)isNaN():判斷一個(gè)數(shù)是不是NaN,返回boolean值(調(diào)用Number轉(zhuǎn)化成數(shù)字再判斷)

? ? ? ? ? ? ? ? 2)++/--/+/-(一元正負(fù)):轉(zhuǎn)化成數(shù)字類(lèi)型(調(diào)用Number轉(zhuǎn)化成數(shù)字)

? ? ? ? ? ? ? ? 3)+號(hào):當(dāng)加號(hào)兩邊有一個(gè)是string類(lèi)型,就會(huì)調(diào)用String,把另一個(gè)也轉(zhuǎn)化成字符串類(lèi)型

? ? ? ? ? ? ? ? 4)+-*/:調(diào)用Number轉(zhuǎn)化成數(shù)字類(lèi)型

? ? ? ? ? ? ? ? 5)&&? ? ||? ? !:調(diào)用boolean進(jìn)行類(lèi)型轉(zhuǎn)化

? ? ? ? ? ? ? ? 6)== != < > <= >=:返回boolean值

? ? ? ? 5.4特殊:undefined == null? ? 返回true? ? ? ? ? ? ? ? NaN == NaN? ? 返回false(NaN跟誰(shuí)都不等)

? ? ? ? 5.5typeof返回的數(shù)據(jù)類(lèi)型的類(lèi)型是String類(lèi)型


6、函數(shù)

????????6.1函數(shù)聲明:function test() {}

????????6.2函數(shù)表達(dá)式(匿名函數(shù)表達(dá)式):var demo = function () {}

arguments是一個(gè)存放實(shí)參的數(shù)組

實(shí)現(xiàn)累加

function sum() {

????????var result = 0;

????????for (var i = 0; i < arguments.length; i++) {

? ? ? ? result += arguments[i];????????}

????????console.log(result);

????????return; //1、終止函數(shù) 2、返回值????}?

???????sum(1, 2, 3, 4, 5, 6, 7, 8, 9);


7、作用域

????????7.1????函數(shù)的屬性:[[scope]],里面存放的是函數(shù)的作用域,是一個(gè)隱式的屬性

? ? ? ? 7.2? ? 執(zhí)行期上下文(AO和GO):函數(shù)的每次執(zhí)行都會(huì)產(chǎn)生一個(gè)執(zhí)行期上下文,函數(shù)執(zhí)行完畢后,執(zhí)行期上下文銷(xiāo)毀

? ? ? ? 7.4????作用域鏈:[[scope]]中所儲(chǔ)存的執(zhí)行期上下文對(duì)象的集合,呈鏈?zhǔn)芥溄?/p>

舉例

function a() {

????????????function b()

????????} {?

???????????var b = 234;

????????}?

???????var a = 123;

????????b();?

???????var glob = 100;?

???????a();

a函數(shù)被定義:a.[[scope]] --> 0 : GO{}

a函數(shù)執(zhí)行:a.[[scope]] --> 0 : AO{}????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1 : GO{}?

b函數(shù)被定義:b的[[scope]]就是a的[[scope]]

b函數(shù)執(zhí)行: b產(chǎn)生一個(gè)AO{} 放在作用域鏈的頂端? ? ? ?

? ? ? ? ? ????????????????????????????????? ? ? ? 0 : b.AO{}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1 : a.AO{}????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2 : a.GO{}

function a() {

????????????function b() {

????????????????function c() {}?

???????????????c();

????????????}?

???????????b();?

???????}?

???????a();

a函數(shù)被定義:a.[[scope]] --> 0 : GO

a函數(shù)執(zhí)行: a.[[scope]] --> 0 : a.AO ????????a函數(shù)執(zhí)行完,銷(xiāo)毀a.AO,再次執(zhí)行a函數(shù),new a.AO

????????????????????????????????????????????????????1 : GO

b函數(shù)被定義:b.[[scope]] --> 0 : a.AO

????????????????????????????????????????????????????? 1 : GO

b函數(shù)執(zhí)行: b.[[scope]] --> 0 : b.AO????b函數(shù)執(zhí)行完,銷(xiāo)毀b.AO,再次執(zhí)行b函數(shù),new b.AO

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1 : a.AO

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2 : GO

c函數(shù)被定義: c[[scope]] --> 0 : b.AO

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 : a.AO

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 : GO

c函數(shù)執(zhí)行: c[[scope]] -->0 : c.AO???????c函數(shù)執(zhí)行完,銷(xiāo)毀c.AO,再次執(zhí)行c函數(shù),new c.AO

????????????????????????????????????????????????1 : b.AO

????????????????????????????????????????????????2 : a.AO

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3 : GO


8、預(yù)編譯

? ? ? ? 8.1? ? 預(yù)編譯是發(fā)生在函數(shù)執(zhí)行的前一刻

? ??????函數(shù)聲明 ???????? 整體提升

????????變量? ? ? ? ? ? ? ? ? ?聲明提升(提升 = 優(yōu)先執(zhí)行)

? ? ? ? 8.2????任何變量未經(jīng)聲明,直接賦值,此變量就為全局對(duì)象所有

? ? ? ? 8.3????一切聲明的全局變量,都是window的屬性(window就是全局的域)

? ? ? ? 8.4? ? 預(yù)編譯的步驟

? ? ? ? ????????8.4.1? ?1)創(chuàng)建AO對(duì)象

? ? ? ? ? ? ? ? ? ? ? ? ? ? 2)找形參和變量聲明,將變量和參數(shù)名作為AO的屬性名,值為undefined

? ? ? ? ? ? ? ? ? ? ? ? ? ? 3)將實(shí)參值和形參統(tǒng)一

? ? ? ? ? ? ? ? ? ? ? ? ? ? 4)在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體

舉例:

????function fn(a) {

????????console.log(a);

????????var a = 123;

????????console.log(a);

????????function a() {}

????????console.log(a);

????????var b = function() {}

????????console.log(b);?

???}

????????fn(1);

AO {

????????a : undefined, -->1-->function a (){}-->123?

???????b ; undefined -->function (){}

????}

function test(a, b) {

????????console.log(a);?

???????c = 0;

????????var c;

????????a = 3;

????????b = 2;

????????console.log(b);

????????function b() {}

????????function d() {}

????????console.log(b);

????}

????test(1);

AO {

???? ???a : undefined,-->1 --> 3?

???????b : undefined,-->function b () {}-->2

????????c : undefined,-->0

????????d : undefined-->function d () {}

????}

function test() {

????????console.log(a); //function a () {}

????????console.log(b); //undefined?

????????var b = 234;

????????console.log(b); //234

????????a = 123;

????????console.log(a); //123

????????function a() {}

????????var a;

????????b = 234;?

???????var b = function() {}?

???????console.log(a); //123

????????console.log(b); //function () {}

????}???? test(1);

console.log(test);?

????function test(test) {

????????console.log(test);?

????????var test = 234;?

???????console.log(test);?

????????function test() {}

????}?

???test(1);

????var test = 123;

????console.log(test);

GO {?

???????test: ????undefined-- > function test(test) {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? console.log(test); //function test () {}?

? ? ? ? ? ? ? ? ? ? var test = 234;???????????????????????????????????????????????????????????????????????????????-- > 123???????????????????????????

????????????????????console.log(test); //234

????????????????????function test() {}

????????????????????}

????????????}

AO {

????????test: undefined-- > 1-- > function test() {}-- > 234

???? }

a = 100;?

???????console.log(a);//100?

???????function fn () {

????????????console.log(a);//undefined

????????????a = 200;

????????????console.log(a);//200

????????????var a = 300;

????????????console.log(a);//300

????????}?

???????fn();

????????var a;

GO {

????????????a : undefined--> 100?

???????}

AO {

????????????a : undefined --> 200 --> 300

????????}

百度面試題

function bar() {

????????return foo; //直接返回,后面的賦值語(yǔ)句不執(zhí)行

????????foo = 10;?

???????function foo() {}?

???????var foo = 11;

????}

????console.log(bar());

AO {

????????bar : undefined --> function foo () { ....}

????}

百度面試題

console.log(bar());

????function bar() {

????????foo = 10;

????????function foo() {}

????????var foo = 11;

????????return foo;?

???}

AO {

????????bar : undefined --> 10 --> function foo () {...} --> 11

????}

a = 100;

????function demo(e) {

????????function e () {}

????????arguments[0] = 2;

????????console.log(e);//2

????????if (a) {//a = undefined 不執(zhí)行 //if 里面不允許聲明function

? ? ? ? ?var b = 123;

? ? ? ? ?function c() {}

}

????????var c;

????????a = 10;?

???????var a;?

???????console.log(b);//undefined?

???????f = 123;

????????console.log(c);//undefined

????????console.log(a);//10

????}

????var a ;

????demo(1);

????console.log(a);//100 這里的a是全局變量

????console.log(f);//123

GO {

????????a : undefined --> 100

????????demo : undefined --> function () {}

????????f :undefined --> 123

????}

AO {

????????e : undefined --> 1 -->function e () {} --> 2?

???????c : undefined

????????b : undefined

????????a : undefined --> 10

????}

9、立即執(zhí)行函數(shù)

????????9.1? ? 目的:1)防止浪費(fèi)空間,執(zhí)行一次就立即釋放

? ? ? ? ? ? ? ? ? ? ? ????? ? 2)針對(duì)初始化功能的函數(shù)

? ? ? ? 9.2? ? 形式:建議用第一種形式

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1)(function () {}())? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2)(function () {})()

幾點(diǎn)說(shuō)明:1.只有表達(dá)式才能被執(zhí)行符號(hào)執(zhí)行(函數(shù)表達(dá)式可以被執(zhí)行,但是函數(shù)聲明不可以)

? ? ? ? ? ? ? ? ? ? 2.被執(zhí)行符號(hào)執(zhí)行的表達(dá)式,會(huì)自動(dòng)忽略函數(shù)的名稱(chēng)

? ? ? ? ? ? ? ? ? ? 3.只要能變成表達(dá)式,就能被執(zhí)行符號(hào)執(zhí)行

可被執(zhí)行的例子:

var num = (function(a, b) {//返回的值給了num

????????var c = a + b;

????????return c;

????}(1, 2));

不可被執(zhí)行的例子:

function test() {?

???????var a = 123;

????????console.log(a);?

???} //函數(shù)聲明,所以它不能被執(zhí)行符號(hào)執(zhí)行

????test();

面試題

說(shuō)明:逗號(hào)(,)操作符,(2, 3)先看前面的表達(dá)式,如果前面的表達(dá)式需要計(jì)算的先計(jì)算,然后再計(jì)算后面的表達(dá)式,如果后面的表達(dá)式需要計(jì)算的話,就計(jì)算后面的表達(dá)式,都計(jì)算完之后,把后面的表達(dá)式的計(jì)算結(jié)果返回回去。

var f = (

???????? function f() {

???????? ????return "1";

???????? },?

??????? function g() {?

??????? ????return 2;

???????? }

????????)();

????????console.log(typeof f);

10、閉包

? ? ? ? 10.1? ? 閉包的形成:兩個(gè)或多個(gè)函數(shù)互相嵌套,把里面的函數(shù)保存到了外面函數(shù)的外部,形成閉包。

? ? ? ? 10.2? ? 閉包的效果:讓局部的函數(shù)保存到全局

? ? ? ? 10.3? ? 閉包的危害:閉包會(huì)導(dǎo)致原有的作用域鏈不被釋放,造成內(nèi)存泄漏

? ? ? ? 10.4? ? 閉包的作用:

? ? ? ? ? ? ? ? 1)? ? 實(shí)現(xiàn)公有變量(函數(shù)累加器)

function add() {?

???????var count = 0;?

???????function demo() {

????????????count++;

????????????console.log(count);

????????}

????????return demo;//將demo函數(shù)保存到add函數(shù)外部

????}

????var counter = add();

????counter();

????counter();

執(zhí)行幾次,就進(jìn)行幾次的累加。

? ? ? ? ? ? ? ? 2)可以做緩存(存儲(chǔ)結(jié)構(gòu))

function eater() {

????????var food = "";

????????var obj = {

????????????eat: function() {

????????????????console.log("i am eating " + food);

????????????????food = "";

????????????},

????????????push: function(myFood) {?

???????????????food = myFood;

????????????}

????????}

????????return obj; //返回了eat和push,都和eater形成了閉包

????}

????var eater1 = eater();

????eater1.push('banana');

????eater1.eat();

????????????????3)可以實(shí)現(xiàn)封裝,屬性私有化

????????????????4)模塊化開(kāi)發(fā),防止污染全局變量

閉包的例子:

按順序打印出0~9

function test() {

????????var arr = []; //arr數(shù)組里存儲(chǔ)了10個(gè)函數(shù)

????????for (var i = 0; i < 10; i++) {

????????????arr[i] = function() {

????????????????document.write(i + " "); //賦值語(yǔ)句,這個(gè)函數(shù)在這里不會(huì)執(zhí)行,只有在執(zhí)行函數(shù)的時(shí)候才會(huì)看函數(shù)內(nèi)部的內(nèi)容

????????????}

????????}

????????return arr;

????}

????var myArr = test();

????for (var j = 0; j < 10; j++) {

????????myArr[j](); //在這里執(zhí)行 arr[i] = function() { document.write (i + " ");},執(zhí)行的時(shí)候去判斷i的值

????}????

以上代碼的顯示結(jié)果不正確,通過(guò)立即執(zhí)行函數(shù)來(lái)解決

function test() {

????????var arr = [];

????????for (var i = 0; i < 10; i++) {

????????????(function(j) {

????????????????arr[j] = function() {

????????????????????document.write(j + " ");

????????????????}

????????????}(i));

????????}

????????return arr;

????}

????var myArr = test();

????for (var j = 0; j < 10; j++) {

????????myArr[j]();

????}

11、對(duì)象

var ZhangSan = {

????????????name: "ZhangSan",

????????????age: 22,

????????????sex: "male",

????????????health: 100,

????????????somke: function () {

????????????????console.log("i am somking!");

????????????????this.health--;

????????????},

????????????ball: function () {

????????????????console.log("i am playing ball");

????????????????this.health++;

????????????}

????????}

????????ZhangSan.apet = "計(jì)算機(jī)系"; //添加屬性

????????console.log(ZhangSan.sex); //查看屬性

????????ZhangSan.age = 21; //修改屬性

????????delete ZhangSan.sex; //刪除屬性

? ? ? ? 當(dāng)一個(gè)對(duì)象的屬性沒(méi)聲明就訪問(wèn),會(huì)返回undefined

? ? ? ? 11.1? ? 對(duì)象的創(chuàng)建方法

? ? ? ? ? ? ? ? 1)var obj = {}??????plainObject?????對(duì)象字面量/對(duì)象直接量

? ? ? ? ? ? ? ? 2)構(gòu)造函數(shù)創(chuàng)建方法:(1)系統(tǒng)自帶的構(gòu)造函數(shù)? ?

????????????????????????????????????????????????????????????????new Object();Arrary();Number();Boolean();String();Date();

? ??????????????????????????????????????????????????????????????var obj = new Object();<==>var obj = {};

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)自定義

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????? ? function Person() {}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????? ? var person = new Person();

? ? ? ? 11.2? ? 構(gòu)造函數(shù)命名規(guī)則:大駝峰式命名規(guī)則???TheFirstName

? ??????????????????函數(shù)命名規(guī)則??小駝峰式命名規(guī)則????theFirstName

? ? ? ? 11.3? ? 自定義構(gòu)造函數(shù)

? ?????????????????構(gòu)造函數(shù)內(nèi)部原理(new)

? ? ? ? ? ? ? ? ? ? (1)在函數(shù)體最前面隱式的加上this = {}

????????????????????(2)執(zhí)行 this.xxx = xxx;

????????????????????(3)隱式的返回this

function Car(color) {

? ? ? ? ? ? //var this = {

? ? ? ? ? ? ? ? ? ? name : "xxx";

? ? ? ? ? ? ? ? ? ? height : "xxx";

? ? ? ? ? ? ? ? ? ? ...

};??

????????????this.color = color;

????????????this.name = "BMW";

????????????this.height = "1400";?

???????????this.lang = "4900";

????????????this.weight = 1000;?

???????????this.health = 100;

????????????this.run = function () {

????????????this.health--;

????????????}

? ? ? ? ? ? //return this;

????????}

????????var car = new Car("red");

????????var car1 = new Car("yellow");

function Person(name, height) {

????????????//var this = {}?

???????????this.name = name;

????????????this.height = height;

????????????this.say = function () {

????????????????console.log(this.say);

???????????? }

???????????? return 123;//除了對(duì)象類(lèi)型,返回其他任何類(lèi)型的原始值都會(huì)轉(zhuǎn)化成對(duì)象類(lèi)型

???????????? //return this;

????????}

? ? ? ? console.log(new Person('xiaowang', 180).name);

????????var person1 = new Person('xiaoliu', 175);

? ? ? ? 幾點(diǎn)說(shuō)明:1)構(gòu)造函數(shù)特點(diǎn):命名大駝峰式

? ? ? ? ? ? ? ? ? ? ? ? ? ? 2)構(gòu)造函數(shù)創(chuàng)建對(duì)象必須通過(guò)new關(guān)鍵字


12、包裝類(lèi)

? ? ? ? 12.1? ? 原始值不可能有屬性和方法,對(duì)象才有屬性和方法(對(duì)象包括object、數(shù)組、function)

? ? ? ? 12.2? ? 原始值不能操作屬性,只能通過(guò)包裝類(lèi)操作

var num = 123;//這個(gè)num是原始值,是沒(méi)有屬性和方法的

var num = new Number(123);//數(shù)字對(duì)象可以操作屬性,也可以進(jìn)行運(yùn)算,但是在運(yùn)算之后就變成了數(shù)字類(lèi)型的了

同樣的還有String和Boolean

var str = new String('abcd');//字符串對(duì)象

var bol = new Boolean('true');//布爾對(duì)象

通過(guò)包裝類(lèi)操作之后,可以操作以上變量的方法

num.abc = "abc";

str.abcd = "abcd";

undefined和null不可以

? ? ? ? 12.3? ? 隱式的發(fā)生包裝類(lèi)

var num = 4;

num.len = 3;

//隱式發(fā)生? ? new Number(4).len = 3;? ? ? ? 在完成之后會(huì)自動(dòng)刪除len(delete)

console.log(num.len);

包裝類(lèi)的例子:

var str = "abc";

str += 1; //'abc1'

var test = typeof (str); //test = "String"

if (test.length == 6) {

test.sign = "typeof的返回結(jié)果可能為String";

//new String(test).sign = 'xxx' ???? 調(diào)用包裝類(lèi)賦值給原始值

}

//重新new String(test).sign? ? ? 但是沒(méi)有賦值

console.log(test.sign);//undefined

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,409評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,569評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,360評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,895評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,123評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,559評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,742評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評(píng)論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,981評(píng)論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,363評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,622評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,354評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,707評(píng)論 2 370

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

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,183評(píng)論 0 13
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,041評(píng)論 0 2
  • 工廠模式類(lèi)似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
    舟漁行舟閱讀 7,796評(píng)論 2 17
  • 單例模式 適用場(chǎng)景:可能會(huì)在場(chǎng)景中使用到對(duì)象,但只有一個(gè)實(shí)例,加載時(shí)并不主動(dòng)創(chuàng)建,需要時(shí)才創(chuàng)建 最常見(jiàn)的單例模式,...
    Obeing閱讀 2,085評(píng)論 1 10
  • 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就是一個(gè)語(yǔ)句。 ...
    米塔塔閱讀 463評(píng)論 1 10