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(){}
函数声明会提升到代码最前边,函数不执行,在调用函数的时候,函数执行。

发布了40 篇原创文章 · 获赞 1 · 访问量 711

猜你喜欢

转载自blog.csdn.net/hanmiao12345/article/details/105517525
今日推荐