1. 程式人生 > >[js]javascript高階-學習筆記 [js]javascript高階-學習筆記

[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程式碼