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,那麼就會在後台呼...