运算符和对象

文章详细阐述了JavaScript中的运算符和表达式的用法,包括逻辑运算符的短路原则,以及如何使用运算符设置函数参数默认值和提高程序健壮性。同时,讨论了对象的属性特性,如数据属性和访问器属性,以及如何通过Object.defineProperty来定义和修改这些属性。
摘要由CSDN通过智能技术生成

运算符和表达式

标识符与表达字
  • 关键字,保留字不能作为标识符
  • 访问属性的方式
    • 通过点号(.)运算符
    • 通过中括号([])运算符
  • window对象属性
    • 全局变量是 window 对象的属性
    • 全局函数是 window 对象的方法
运算符与表达式
  • 字面量

  • 运算符

  • 运算符优先级

  • 逻辑运算符

    • 两边的操作数都是布尔类型时

      • 对于&&来说, 除了两侧都为真时为真,其他情况都为假
      • 对于| |来说, 除了两侧都为假时为假,其他情况都为真
    • 两侧的操作数不是布尔类型

      • 首先将左操作数转换成布尔类型
      • 对转换后的左操作数进行逻辑判断(true or false)
      • 根据短路原则返回原始左操作数或原始右操作数
    • 短路原则

      • console.log(2&&4);    //4
        console.log({x:2}&&{name:"Jack"});    //{name:Jack}
        console.log(2||4);     //2
        console.log({x:2}||{name:"Jack"});    //{x:2}
        
      • 应用

        • 使用||设置函数参数的默认值
        • 使用&&提升程序的健壮性
        • 使用||和&&实现条件语句(减少代码量,增加执行效率)
  • 比较运算符(=

  • 递增递减(++、–)

  • 赋值运算符

    • 多级赋值

    • var a = {n: 1};
      var b = a;//b被赋值为a,因此b就是对象{n:1}
      a.x = a = {n: 2};
      //a.x指的是给a添加一个x属性,在js的运算中“.”和"="运算符同时出现,会先执行"."运算
      //因此先给a.x赋值,再给a赋值
      //先执行:a.x={n:2},这里a并未改变,是给a的x属性赋值为{n:2},a还是{n:1}
      //给{n:1}这个对象增加了名为x的属性
      //再执行a={n:2},变量a被重新赋值为一个新的对象{n:2};
       
      console.log(a);   //{n:2}
      console.log(b);   //a的二次赋值,并没有影响b,b还是{n:1},但是{n:1}这个对象,增加了一个x属性
      console.log(a.x);//{n:2}对象没有x属性,所以结果是undefined
      console.log(b.x);//综上所述,这个结果是{n:2}
      
    • var a = { n: 1 };
      a.x = a = { n: 2 };
      console.log(a.x);   //undefined
      
  • 表达式

    • 函数表达式
    • IIFE:立即执行的函数表达式
      • 建立函数作用域限制变量的作用域
      • 解决ES5作用域缺陷(没有块作用域)所带来的问题,如:变量污染、变量作用域等问题)
语句

对象的属性特性

对象与属性
  • 对象是一种复合值,是若干无序属性的集合
  • 函数作为某一个对象的属性时,称其为该对象的方法
  • 操作数据就是操作对象的属性
  • 对象的创建:
    • 对象字面量方式
    • Object的create静态方法
    • 构造函数
  • 对象分类:
    • 内置对象(构造器函数对象、非构造器对象)
    • 宿主对象
    • 自定义对象
  • 属性的种类
    • 数据属性
    • 访问器属性
    • 内置属性
数据属性及其特性
  • 数据属性的特性
    • value:属性的值
    • writable:可写性 —— 是否可以改写
    • configurable:可配置特性 —— 是否能删除以及其他特性是否可配置
    • enumerable:可枚举特性
  • 属性描述符
    • 设置 —— Object.defineProperty(obj, prop, descriptor)
      • obj —— 要在其上定义属性的对象
      • prop —— 要定义或修改的属性的名称
      • descriptor —— 将被定义或修改的属性描述符
    • 查询 —— Object.getOwnPropertyDescriptor(obj,prop)
  • 枚举性 ——是否能枚举: obj.propertyIsEnumerable(prop)
  • 定义属性
    • 属性不存在 —— 创建新属性,由描述符指定特性,未指定使用默认值
    • 属性存在 —— 更新描述符指定的属性特性,没有对应的特性保持不变
访问器属性及其特性
  • 间接访问属性的方法(访问和设置时都不加括号,没有function关键字

  • 属性特性

    • get(读取):读取属性时调用的函数,该函数计算读取的结果,默认是 undefined

    • set(设置) :设置属性值时调用的函数,该函数接受设置的值作为参数,默认是undefined

    • configurable

    • enumerable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值