JS循环语句、对象属性

for

循环三要素:计数器,结束条件,迭代器

初始条件,结束条件,迭代条件

for(var i=1;i<10;i++){  
  //循环体  
  console.log(i);  
}

var i=1;

//死循环  
for(;;){  
  //循环体  
  console.log(i);  
  i++;  
}

Label语句

使用label语句可以在代码中添加标签,以便将来使用

注意!ECMAScript5不存在块级作用域,在循环内部定义的变量也可以在外部访问到

关键字 break 如果想在所有迭代前退出,即可使用break。当执行break后,会立即跳出循环体,执行下

面的代码。

关键字 continue

与break不同的是,continue不会跳出循环。而是立即结束当前循环,进入下一次循环。

while/do-while

前测试语句

var i=0;
while(i<10){
//循环体
i++;
}
for(;i<10;){
//循环体
i++;
}

后测试语句

var i=0;
do{
//循环体
console.log(i);
i++;
}while(i>10);

基本数据类型,引用数据类型

基本数据类型的变量:

  • 可以直接操作保存在变量中的实际的值
    参数传递的时候传递的是实际值

引用数据类型的变量:

  • 不能直接操作对象的内存空间,实际上是在操作对象的引用。
    可以为引用类型变量添加属性和方法,也可以改变和删除其属性和方法
    参数传递的时候传递的是引用地址。

值传递

	值的拷贝

引用传递

	引用地址的拷贝

对象

Object ECMAScript中的对象 其实就是一组数据(属性)和功能(方法)的集合。

创建Object实例:

  • 1.使用构造函数创建,new Object()
    var person = new Object();
    person.name = “briup”;
    person.age = 22;

  • 2.使用对象字面量表示法
    不同的属性之间用’,‘分割,属性名和属性值之间用’:'分割
    var person = {
    name : “briup”,
    age : 22
    };

访问对象属性

  • 1.点表示法,右侧必须是以属性名称命名的简单标识符
    person.name

  • 2.中括号表示法,中括号中必须是一个计算结果为字符串的表达式,可以通过变量访问属性,如果属性名中包含语法错误的字符,或者属性名使用的是关键字或保留字,可以使用中括号 person[“first name”]
    var a = “name”;
    person[a]; //既person[“name”]
    person[“first name”]

删除属性

  • delete只是断开了属性和宿主对象的联系,而不会操作属性中的属性,并且delete只会删除自有属性,不能删除继承属性。在销毁对象时,为了防止内存泄露,遍历对象中的属性,依次删除所有属性。
    语法:delete 属性访问表达式
    例如:
    delete stu.name //删除学生对象中的name属性

检测属性

  • in 检测某属性是否是某对象的自有属性或者是继承属性

    • 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 不可枚举

Object原型属性及方法(原型方法,实例可以调用的方法)

  • Object 类型所具有的任何属性和方法也同样存在于其他对象中,任何对象继承于Object对象

  • Object中常用的方法:

    • hasOwnProperty(propertyName);
      检查给定的属性名是否是对象的自有属性,

    • toString();
      返回对象的字符串表示

    • valueOf();
      返回对象的字符串,数值,布尔值的表示。

    • propertyIsEnumerable(propertyName);
      检查给定的属性在当前对象实例中是否存在

    • constructor:
      保存用户创建当前对象的函数

    • isPrototypeOf(object);
      检查传入的对象是否是原型

    • toLocaleString();
      返回对象的字符串表示,该字符串与执行环境的地区对应

对象序列化

  • 对象序列化是指将对象的状态转换为字符串,也可以反序列化,将字符串还原为对象函数,RegExp,Error对象,undefined值不能序列化和反序列化。

  • JSON.stringify(obj)

    • 将对象序列化为Json字符串,只能序列化对象可枚举的自有属性。
  • JSON.parse(jsonStr)

    • 反序列化

深入理解对象

ECMA-262对象的定义:无序属性的集合,其属性可以包含基本值,对象,或者函数。可以将对象想象成散列表:键值对,其中值可以是数据或者函数。

属性类型

  • 1.数据属性: 例如:name
    包含一个属性值的位置,这个位置可以读取和写入值。

    • [[Configurable]]
      表示是否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性直接定义在对象中,默认为true)

    • [[Enumerable]]
      表示能否通过for-in循环返回属性。(直接定义在对象中,默认为true)

    • [[Wriable]]
      表示能否修改属性的值。(直接定义在对象中,默认为true)

    • [[Value]]
      包含这个属性的数据值 name:jacky
      要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()方法

      • defineProperty(属性所在的对象,属性的名字,一个描述符对象);
        configurable: 当为false时,不能修改
  • 2.访问器属性 例如:_year 所对应的 year(访问器属性)

    • 访问器属性不包含数据值,包含一对setter,getter方法。

    • [[Configurable]]:
      [[Enumerable]] :
      [[Get]]
      在地区属性时调用的函数,默认为undefined
      [[Set]]
      在写入属性时调用的函数,默认为undefined

      • var book = {
        _year :2004,
        edition:1
        }
        Object.defineProperty(book,“year”,{
        get:function(){
        return this._year;
        },
        set:function(year){
        this._year = _year;
        }
        });

        • _year前面的下划线是一种常用的记号,用来表示只能通过对象方法访问的属性。而访问器属性year则包含一个getter函数和一个setter函数。

2) 定义多个属性

  • Object.defineProperties();
    该方法接受两个对象参数,第一个是要添加或者要修改属性的对象;第二个对象的属性和第一个对象中要添加和修改的属性对应

    • var book = {};
      Object.defineProperties(book,{
      _year :{ //数据属性
      value:1001
      },
      edition :{ //数据属性
      value:1
      },
      year :{ //访问器属性
      get:function(){
      return this._year+1
      },
      set:function(year){
      this._year = year
      }
      }
      });
      console.log(book.year);

3) 读取属性的特性

  • Object.getOwnPropertyDescriptor();获取指定属性的描述符该方法接受两个参数,第一个为属性所在的对象,第二个为要读取其描述符的属性名称

    • var descriptor = Object.getOwnPropertyDescriptor(book,"_year");
      console.log(descriptor.value); //1001
      console.log(descriptor.configurable) //false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值