[js]javascript高階-學習筆記 [js]javascript高階-學習筆記
[js]javascript高階-學習筆記
一.js面向物件的一種實現
<script type="text/javascript">
function Person() {
this.name = "張三";
this.age = 0;
var nickName = "小三"; //類似私有變數,函式中的區域性變數在函式執行完後自動銷燬.
this.SayHi = function () {
alert("我的名字是" + this.name + " ,大家都叫我" + nickName + " ,我今年已經" + this.age + "歲了");
}
}
/////////////////////////
function Student(myclass, myteacher) {
this.myClass = myclass;
this.myTeacher = myteacher;
this.SayHi = function () {
if (this.myClass != undefined) {
alert("我是"+this.myClass+"的"+this.name);
}
else if (arguments.length == 2) {
alert("我是" + this.myClass + "的" + this.name + ", 我的老師是" + this.myTeacher);
}
else {
new Person().SayHi();
}
}
}
Student.prototype = new Person(); //建立繼承關係
//////////////
onload = function () {
var p = new Person(); //類似例項化類Person,物件的建立(解析兩次)並不是推薦用法
p.age = 18; //給Person的age賦值, age相當於屬性
p.SayHi(); //呼叫Person裡的公共方法,輸出結果:我的名字是張三 ,大家都叫我小三 ,我今年已經18歲了!
var stu = new Student('三年級二班', 'jameszou'); //有參建構函式
stu.name = 'le'; //父類的屬性
stu.SayHi(); //Student重寫了SayHi方法
var stu1 = new Student();
stu1.myClass = '三年級三班';
stu1.myTeacher = 'ly';
stu1.SayHi(); //輸出:我是三年級三班的張三"
var stu2 = new Student();
stu2.age = 20;
stu2.SayHi();//輸出:?:我的名字是張三,大家都叫我小三,我今年0歲了
}
</script>
二.6種簡單資料型別:
1)Undefined.一個變數被定義但是沒有給他賦值.
2)Null.(引用型別)
3)Number.數值型別
var num = 1.0這個時候num是int型別,只有當小數點後面不為0的時候才是浮點型,
isNaN()可以判斷傳人的值是否為Number型別,
var num = parseInt('112412aaa11'); num=112412;
4)Boolean.
5)String
6)function
Function型別:
執行環境:就是當前函式(方法)所處在的父環境。比如在window下執行的函式他的執行環境就是window。
沒有塊級作用域:if等語句沒有用塊狀作用域,if,for等用大括號括起來的程式碼並不能形成一個塊狀作用域。
var變數宣告:用var宣告變數時,會他把新增到最近的可用環境,即不用var定義的一個變數是全域性變數.
宣告語句會首先執行,以保證程式的執行.
垃圾回收:變數物件設為null的時候原物件將被自動回收.
屬性:
this.函式所在的執行環境,函式在執行時所處的作用域.
prototype(原型).
三.複雜型別
Object:
Object型別本質是一個無序的鍵值對列表,類似於集合,json格式。
建立Object可以有多種方式:
1)var obj = new Object(); obj.name="lz"; obj.age=17;
2)var s = {}; s.name="ly"; s.age=18;
3)var s = {"name":"ln","age":"17"};
訪問Object物件的屬性的方法:
1)obj.name
2)obj["name"]
Array型別:
相當於List<T>,length屬性是可讀寫的(可以利用這一點刪除陣列元素)
陣列的棧方法:(後進先出)
push() 往裡加 pop() 從棧頭往外拿
陣列的佇列方法:(先進先出)
shift() 從佇列尾部往外拿 unshift() 從佇列尾部往裡加
排序:
sort() 排正序,將陣列中的資料按照一定的順序排列,引數可以傳遞一個可傳入比較方法(類似於介面) reverse() 翻轉
連線陣列: concat()
var colors=["a","b"];
var newcolor=colors.concat("yellow",["c","d"]);//colors有5個元素。
concate方法中若傳入陣列,會把該陣列拆分,將其中元素加入目標陣列中。若傳入json格式資料,一個json資料就看成一個元素加入陣列。
四.其他
typeof: return true or false,
instanceof 判斷複雜型別的型別 return true or false,如果用它來判斷值基本型別型別永遠返回false,
eval()他會把eval()中的引數解析出來,插入到eval執行的位置,效果相當於在相應的位置直接寫入JS程式碼
一.js面向物件的一種實現
<script type="text/javascript">
function Person() {
this.name = "張三";
this.age = 0;
var nickName = "小三"; //類似私有變數,函式中的區域性變數在函式執行完後自動銷燬.
this.SayHi = function () {
alert("我的名字是" + this.name + " ,大家都叫我" + nickName + " ,我今年已經" + this.age + "歲了");
}
}
/////////////////////////
function Student(myclass, myteacher) {
this.myClass = myclass;
this.myTeacher = myteacher;
this.SayHi = function () {
if (this.myClass != undefined) {
alert("我是"+this.myClass+"的"+this.name);
}
else if (arguments.length == 2) {
alert("我是" + this.myClass + "的" + this.name + ", 我的老師是" + this.myTeacher);
}
else {
new Person().SayHi();
}
}
}
Student.prototype = new Person(); //建立繼承關係
//////////////
onload = function () {
var p = new Person(); //類似例項化類Person,物件的建立(解析兩次)並不是推薦用法
p.age = 18; //給Person的age賦值, age相當於屬性
p.SayHi(); //呼叫Person裡的公共方法,輸出結果:我的名字是張三 ,大家都叫我小三 ,我今年已經18歲了!
var stu = new Student('三年級二班', 'jameszou'); //有參建構函式
stu.name = 'le'; //父類的屬性
stu.SayHi(); //Student重寫了SayHi方法
var stu1 = new Student();
stu1.myClass = '三年級三班';
stu1.myTeacher = 'ly';
stu1.SayHi(); //輸出:我是三年級三班的張三"
var stu2 = new Student();
stu2.age = 20;
stu2.SayHi();//輸出:?:我的名字是張三,大家都叫我小三,我今年0歲了
}
</script>
二.6種簡單資料型別:
1)Undefined.一個變數被定義但是沒有給他賦值.
2)Null.(引用型別)
3)Number.數值型別
var num = 1.0這個時候num是int型別,只有當小數點後面不為0的時候才是浮點型,
isNaN()可以判斷傳人的值是否為Number型別,
var num = parseInt('112412aaa11'); num=112412;
4)Boolean.
5)String
6)function
Function型別:
執行環境:就是當前函式(方法)所處在的父環境。比如在window下執行的函式他的執行環境就是window。
沒有塊級作用域:if等語句沒有用塊狀作用域,if,for等用大括號括起來的程式碼並不能形成一個塊狀作用域。
var變數宣告:用var宣告變數時,會他把新增到最近的可用環境,即不用var定義的一個變數是全域性變數.
宣告語句會首先執行,以保證程式的執行.
垃圾回收:變數物件設為null的時候原物件將被自動回收.
屬性:
this.函式所在的執行環境,函式在執行時所處的作用域.
prototype(原型).
三.複雜型別
Object:
Object型別本質是一個無序的鍵值對列表,類似於集合,json格式。
建立Object可以有多種方式:
1)var obj = new Object(); obj.name="lz"; obj.age=17;
2)var s = {}; s.name="ly"; s.age=18;
3)var s = {"name":"ln","age":"17"};
訪問Object物件的屬性的方法:
1)obj.name
2)obj["name"]
Array型別:
相當於List<T>,length屬性是可讀寫的(可以利用這一點刪除陣列元素)
陣列的棧方法:(後進先出)
push() 往裡加 pop() 從棧頭往外拿
陣列的佇列方法:(先進先出)
shift() 從佇列尾部往外拿 unshift() 從佇列尾部往裡加
排序:
sort() 排正序,將陣列中的資料按照一定的順序排列,引數可以傳遞一個可傳入比較方法(類似於介面) reverse() 翻轉
連線陣列: concat()
var colors=["a","b"];
var newcolor=colors.concat("yellow",["c","d"]);//colors有5個元素。
concate方法中若傳入陣列,會把該陣列拆分,將其中元素加入目標陣列中。若傳入json格式資料,一個json資料就看成一個元素加入陣列。
四.其他
typeof: return true or false,
instanceof 判斷複雜型別的型別 return true or false,如果用它來判斷值基本型別型別永遠返回false,
eval()他會把eval()中的引數解析出來,插入到eval執行的位置,效果相當於在相應的位置直接寫入JS程式碼