JavaScript高階程式設計

2021-09-14 01:13:16 字數 3190 閱讀 8315

ecmascript有5種基本型別資料:

另外還有一種複雜的資料型別

typeof就是用來檢測變數的資料型別的,typeof可能會返回以下值:

typeof操作符在檢測引用型別的值時,總是會返回object,所以用處不大。

instanceof用來檢測物件型別的,返回值是 true | false。

例如:

person instanceof object

colors instanceof array

即使定義的時候只接收兩個引數,但是呼叫時未必一定要傳兩個引數

原因: 引數的內部是用乙個陣列(arguments)來表示的。

沒有過載:因為沒有函式簽名

比較常用的幾個方法:

join()

push()

slice():基於當前陣列中的乙個或多個建立乙個新陣列

indexof()

filter(function(){})

foreach(function(){})

map(function() :返回乙個新陣列

[[configurable]] : 能否通過刪除屬性從而重新定義屬性。預設為true

[[enumerable]] : 能否通過for-in迴圈返回屬性。預設為true

[[writable]] :能否修改屬性值。預設為true

[[value]] : 這個屬性的值。預設為undefined

舉例:

var person=
上面person物件的name屬性值被設定為tangwenxing,也就是說它的[[value]]值被設定位tangwenxing.

object.defineproperty()用來修改屬性的預設特性(configurable,enumerable,writable,value),它有三個引數:

使用方法參見如下**:

var person={};

object.defineproperty(person,"name",)

現在的name屬性不可以被刪除也不可以重新賦值了。

主要是設定getter setter方法,因為不太重要,所以不提了。

var person={}

object.defineproperties(person,,

age:

})

var descriptor = object.getownpropertydescriptor(person,"name");

alert(descriptor.writable);

function person(){}

person.prototype.name="twx";

person.prototype.age=29;

person.prototype.sayname=function();

var person1=new person();

var person2=new person();

person函式有乙個prototype屬性,prototype指向乙個(匿名)原型物件。

例項person1、person2指向person.prototype.

在例項中建立原型中的同名屬性,會覆蓋原型中的那個屬性。

接上面的程式

......

alert(person1.name); //twx

person1.name = "fgh";

alert(person1.name); //fgh ——-來自例項

delete person1.name;

alert(person1.name); //twx --來自原型

檢測乙個屬性是存在例項中還是原型中

接上面的程式

......

person1.hasownproperty("name"); //false

person1.name = "fgh";

person1.hasownproperty("name"); //true

delete person1.name;

person1.hasownproperty("name"); //false

獲取物件上所有可列舉的例項屬性

var per1keys = object.keys(person1);

alert(per1keys); //name,age,sayname

function person(){}

person.prototype =

}

前面提到了,原型物件會自動獲取乙個constructor屬性。但是在這裡,我們完全重寫了原型物件,因此constructor屬性也不在是預設的(預設指向物件的建構函式)。

因此可以這樣寫:

function person(){}

person.prototype =

}

定義新方法:

string.prototype.startswith=function(text)

var message = "hello world!";

msg.startwith("hello") //true

function person(name,age,job)

person.prototype =

}var person1 = new person("twx",25,"it");

var person2 = new person("hyc",27,"sale");

person1.friends.push("jlk");

alert(person1.friends); //'shely','bob','jlk'

alert(person2.friends); //'shely','bob'

alert(person1.sayname === person2.sayname); //true

JavaScript高階程式設計 this

在函式中this到底取何值,是在函式真正被呼叫執行的時候確定的,函式定義的時候確定不了 因為this的取值是執行上下文環境的一部分,每次呼叫函式,都會產生乙個新的執行上下文環境。所謂建構函式就是用來new物件的函式。其實嚴格來說,所有的函式都可以new乙個物件,但是有些函式的定義是為了new乙個物件...

javascript 高階程式設計 二

這裡我們直接進入主題 在js剛剛開始的時候,必須面臨乙個問題,那就是如何使的js的載入和執行不會影響web核心語言html的展示效果,和html和諧共存。在這個背景下 2 xhtml中的應用 在html中如果字串,那麼html就會認為js指令碼已經結束所以會產生乙個錯誤用一下 來替換 來替換aler...

javascript 高階程式設計 四

新的一天開始,讓我們伴隨者輕快的心情,開始今天的筆記 1 操作符 1 在ecmascript中操作的時候,如果遇到有乙個操作值不是數值型 number 那麼就會在後台呼叫number 方法,將其轉化成number 2 和上面的三個操作符是不一樣的,只要其中乙個操作值不是number,那麼就會在後台呼...