JavaScript_day09

day09內容

學習目標
1.對象檢測
2.對象中方法的使用
3.構造函數、原型對象、實例
4.對象序列化和反序列化
5.函數聲明和表達式聲明
6.函數聲明提升,變量聲明提升
7.arguments

1.對象

  1. 檢測屬性
    in 檢測某屬性是否是某對象的自有屬性或者是繼承屬性
    “toString” in student
    hasOwnProperty()檢測給定的屬性是否是對象的自有屬性,對於繼承屬性將返回false
    var o = {
    x:1
    }
    o.hasOwnProperty(“x”); //true, x 爲o的自有屬性
    o.hasOwnProperty(“y”); //false,o 中不存在屬性y
    o.hasOwnProperty(“toString”); //toString爲繼承屬性
    propertyIsEnumerable() 檢測給定的屬性是否是該對象的自有屬性,並且該屬性是可枚舉的通常由JS代碼創建的屬性都是可枚舉的,但是可以使用特殊的方法改變可枚舉性。
    student.propertyIsEnumerable(“toString”) //false 不可枚舉

  2. Object屬性及方法
    Object 類型所具有的任何屬性和方法也同樣存在於其他對象中,任何對象繼承於Object對象
    Object中常用的方法:
    hasOwnProperty(propertyName);
    檢查給定的屬性名是否是對象的自有屬性
    toString();
    返回對象的字符串表示
    valueOf();
    返回對象的字符串,數值,布爾值的表示。
    propertyIsEnumerable(propertyName);
    檢查給定的屬性在當前對象實例中是否存在
    constructor
    保存用戶創建當前對象的函數
    isPrototypeOf(object);
    檢查傳入的對象是否是原型
    toLocaleString();
    返回對象的字符串表示,該字符串與執行環境的地區對應

  3. 對象序列化
    對象序列化是指將對象的狀態轉換爲字符串,也可以反序列化,將字符串還原爲對象函數,RegExp,Error對象,undefined值不能序列化和反序列化。
    JSON.stringify(obj)
    將對象序列化爲Json字符串,只能序列化對象可枚舉的自有屬性。
    JSON.parse(jsonStr)
    反序列化
    2.函數
    函數實際上是對象,每個函數都是Function類型的實例,具有屬性和方法,函數名實際上是指向函數對象的指針。

  4. 表示方法:
    1.函數聲明
    function sum(a,b){
    return a+b;
    }
    2.函數表達式
    var sum = function(a,b){
    return a+b;
    }
    解析器在向執行環境中加載數據時,會率先讀取函數聲明,並使其在執行任何代碼之前可用;當執行器執行到函數表達式的代碼的時候纔會真正的解釋執行

  5. 函數的參數
    ECMAScript函數的參數與大多數其他語言中的函數的參數有所不同,ECMAScript函數不介意傳遞參數的個數以及參數類型,這是因爲函數的參數在函數內容是使用一個類數組對象來表示的。這個類數組對象就是arguments

  6. 函數的調用
    在JS中,函數沒有重載的概念,兩個函數的函數名相同即是同樣一個函數,但是Java中不是
    函數名(實參列表)

  7. 作爲值的函數
    由於函數名本身就是變量,所以函數可以當做值來使用(參數,返回值)。
    function callOther(fun,args){
    return fun(args);
    }
    function show(msg){
    alert(msg);
    }
    callOther(show,“哈哈”); //show爲參數

  8. 作爲返回值的函數
    eg:多功能自定義排序函數
    function myCompare(pro){
    //函數將作爲返回值返回
    return function(obj1,obj2){
    var val1 = obj1[pro];
    var val2 = obj2[pro];
    if(val1<val2){
    return -1;
    }else if(val1>val2){
    return 1;
    }else {
    return 0;
    }
    }
    }
    var data = [
    {
    name : “aaa”,
    age :12
    },{
    name:“ccc”,
    age : 8
    },{
    name :“bbb”,
    age : 71
    }
    ];
    console.log(data);
    data.sort(myCompare(“age”));
    console.log(data);

  9. 函數內部屬性

    1. arguments :是類數組對象,包含着傳入函數中參數,arguments對象還有一個callee的屬性,用來指向擁有這個arguments對象的函數

      例如:
      num的階乘,使用遞歸函數
      function factorial(num){
      if(num<=1){
      return 1;
      }else{
      //return num * factorial(num-1);
      return num * arguments.callee(num-1);
      }
      }

    2. this: 指向的是函數賴以執行的環境對象
      window.color = “window”;
      var person = {
      color:“person”
      };

    function sayColor(){
    alert(this.color);
    }
    sayColor(); //window對象調用,所以彈出 “window”
    person.sayColor = sayColor; //將該方法賦給person對象
    person.sayColor();//使用person對象調用該方法,彈出"window"

  10. 函數的屬性
    length: 表示函數希望接受的命名參數的個數
    function say(msg){} //say.length 1 希望接受一個參數
    function add(m,n){} //add.length 2 希望接受兩個參數
    prototype: 保存實例方法的真正所在。在自定義引用數據類型以及繼承時非常重要。

  11. 函數的方法
    this->該函數所在的環境對象

    apply : 參數(在其中運行函數的作用域,參數數組(Array,arguments));
    call : 參數(在其中運行函數的作用域,參數列表)
    這兩個方法作用都是在特定的作用域中調用函數,實際上等於設置函數內部的this的值

    用法一:
    function sum(m,n){
    return m+n;
    }
    function call(m,n){
    //return sum.apply(this,arguments);
    return sum.call(this,m,n);
    }
    alert(call(1,2));
    用法二:
    擴充函數賴以運行的作用域
    window.color = “window”;
    var person = {
    color:“person”
    };
    function sayColor(){
    alert(this.color);
    }
    sayColor.call(this);
    sayColor.call(window);
    sayColor.call(person);

note

作業
判斷101-200之間有多少個素數,並輸出所有素數(只能被1和它本身整除的自然數爲素數)
var count = 0;
label1:for(var i=101;i<=200;i++){
var flag = true;
for(var j=2;j<i;j++){
if(i%j==0){
flag = false;
continue label1;
}
}
count++;
console.log(i);
}
console.log(‘個數爲:’,count);

複習
對象
對象的創建
構造函數表示法
var obj = new Object(); //{}
對象字面量表示法
var obj2 = {};
添加
obj2.name = ‘’;
修改(屬性已經存在)
obj2.name = ‘’;
刪除
delete obj2.name;
訪問
obj2.name
obj2[‘name’]
var a = ‘name’;
obj[a]
遍歷
for(var key in obj){
key–>屬性名
obj[key]–>對應的屬性值
}
對象方法
var obj = {
name:‘zhangsan’,
age:12,
sayName:function(){
console.log(1);
}
};
obj.name
obj.sayName //函數
obj.sayName() //運行obj.sayName函數

function test(){}
test //函數的名字 function

運行函數
函數名()
test()

前後端進行數據交互
前端 js的數據類型 中國話
JSON字符串 將前端的對象數組轉成json字符串
JSON.stringify(obj) //將前端的對象數組轉成json字符串
獲取到了後臺給的json字符串,需要轉換成前端的對象或者數組
JSON.parse(jsonStr)

後臺 Java的數據類型 印度話
JSON字符串 將後臺的對象或者數組集合轉成json字符串

函數
函數聲明2種方式
1.函數聲明
function test(形參列表){}
2.函數表達式聲明(匿名函數)
var test = function(){}
函數聲明會提升到代碼最前邊,函數不執行,在調用函數的時候,函數執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章