相同比较(也叫绝对相等/全等)

  • 运算符
    • === 比较两个运算数的返回值以及数据类型是否相同;
    • !== 比较两个运算数的返回值以及数据类型是否不相同
  • 比较原则
    • 值类型间比较,只有数据类型相同,且数值相等时才能够相同;
    • 值类型与引用类型比较,肯定不相同,
    • 引用类型间的比较,比较他们的引用值(内存地址)

 

对象运算符;

  • In 判断左侧运算数是否为右侧运算数的成员;
  • Instancesof 判断对相爱呢个实例是否属于某个类或构造函数
  • New 根据构造函数创建一个新的对象,并初始化该对象
  • Delete 删除指定对象的属性,数组元素或变量
    • 可以删除对象里的属性:
        var myObj = {name: 'aaaa', age: 21};  
    •   delete myObj.age;  
    •   console.log(myObj); // 输出对象{name: "aaaa"}  
  • .及[] 存取对象和数组元素
  • () 函数调用,改变运算运算符优先级等;

其他运算符;

  • ?: 条件运算符,简介的if else;也叫三元运算符/三目运算符;
    • 基本格式为:条件表达式?表达式一:表达式二;
    • 其中问号之前的表示判断的条件,如果这个条件为真,则执行问号后面的语句,如果判断条件不成立,则执行冒号后面的语句;

 

 

=/==/===!!!的区别

 

======三者的区别;

千万不要把"=="当做"="来使用,

千万不要把"=="当做"="来使用,

千万不要把"=="当做"="来使用,尤其是写if语句的时候一定要注意;

  • =、一个等号是赋值运算,把等号右边的值付给左边的变量,是从右想做计算,并且运算优先级最低;
  • ==。两个等号是比较运算,会得到一个真/假的逻辑只,遇到左右两边是不同的数据类型,默认会进行数据类型转换;
  • ===、三个等号是绝对的相等,只有数据类型一样才有可比性,遇到左右两边数据类型不同,并不会像==一样进行数据类型转换;

 

!!!

  • !是取反的意思;先将其它的数据类型转换为布尔类型;然后在取反;
  • !!是将其他的数据类型转换为不二类型,相当于Boolean;

记住前面说的哪些数据是真,哪些是假就可以了;

0 NaN "" null undefined这些用都是flase

  • 如果操作数是一个对象,返回 false ;
  • 如果操作数是一个空字符串,返回 true ;
  • 如果操作数是一个非空字符串,返回 false ;
  • 如果操作数是数值 0,返回 true ;
  • 如果操作数是任意非 0 数值(包括 Infinity ),返回 false ;
  • 如果操作数是 null ,返回 true ;
  • 如果操作数是 NaN ,返回 true ;
  • 如果操作数是 undefined ,返回 true 。

 

 

 

循环语句:

  • while
    • 语法 while (条件表达式) { //循环执行代码段 }
    • 流程
      • 1、判断条件表达式的值
      • 2、当值为true时循环执行代码段
      • 3、当值为false时退出循环体
    • 特性
      • 先检查条件,再执行循环体
      • 条件不满足则循环一次也不执行
    • 时机
      • 一个动作被重复执行到满足某个条件时
  • do-while
  • 语法 do { //代码执行主体 } while (条件表达式);
  • 流程
    • 1、先执行循环体内代码再进行判断
    • 2、如果表达式的值为true,则重复执行代码段
    • 3、如果表达式的值为false,则退出循环体
  • 特性
    • 先执行循环体,再进行条件判断
    • 循环体内代码至少执行一次
  • 时机
    • 希望一个动作至少被执行依次时
  • for
    • 特性
      • for(循环变量=初值;循环条件;递增/递减计数器){循环代码段};
        for (var i = 0; i < array.length; i++) {
      •   array[i]
      •   //代码执行的主体
      • }
      • 注意for循环length的优化;
  • 流程
    • 1、用循环变量初始值与循环条件相比较,确定返回值
    • 2、如果返回值为true则执行循环体
    • 3、执行完一次后进行递增/递减运算
    • 4、将运算结果与循环条件相比较
    • 5、如果返回值还是true则继续执行循环体;如果返回值为false则退出循环体;
  • 时机
    • 重复一个动作到一定次数时;
  • for-in
    • 语法
      • for(声明变量in对象){代码段} for (var variable in object) { if (object.hasOwnProperty(variable)) { //代码执行主体 } }
      • 作用:枚举对象属性

注意事项

  • 1、循环输出的属性顺序不可预知
  • 2、对象的值不能是null或者undefined;

 

跳转语句:

  • return:终止函数体的运行,并返回一个值
  • break:终止整个循环,不再进行判断
  • continue:结束本次循环,接着去判断是否执行下次循环;

 

 

选择语句:

选择语句,有三个,if和switch、?:三目运算符

if

  • 句法 if(条件表达式1){ 代码段1 }else if(条件表达式2){ 代码段2 }else{ 代码段3 }
  • 流程
    • 1、判断条件1,如果返回值为true则执行代码段1
    • 2、如果条件1的返回值为false,则跳过语句块1并检测条件2
    • 3、如果所有表达式的值均为false则执行else后面的语句(else的这个语句为非必须的,可以不写)
  • 特性
    • 结果复杂可嵌套
    • 可检测度哟个条件表达式
    • 表达式的值具有线性特征
    • 表达式的值的动态的
    • 适用于任意类型的数据
    • 可处理复杂的逻辑关系(代码的逼格低,多重判断可用swith case代替)

switch

  • 句法 switch(条件表达式){ case 标签1: 代码段1 break; …… Default: 代码段n; }
  • 流程
    • 1、计算表达式的值,并与各标签相比较
    • 2、若找到与之匹配的标签,则执行其后面的代码段
    • 3、弱没有照东啊与之匹配的标签,则直接执行default之后的代码段(default是非必须的)
  • 格式
    • case标签为常量,可以是字符串或数字
    • 每个标签均为冒号:结束
    • 虽然break与default为可选项,但为了逻辑清晰最好不要省略
    • case标签的值必须和条件表达式的值完全匹配
  • 特性
    • 结构简介,转为多重选择设计
    • 仅可测试一条条件表达式
    • 表达式的值具有离散型
    • 表达式的值是固定的,不会动态变化的
    • 仅能应用整数,枚举,字符串等类型数据
    • 仅能处理多个枚举型逻辑关系

 

异常处理语句:

  • throw:主动抛出异常
  • try:指明需要处理的代码段
  • catch:捕获异常
  • finally:后期处理,无论出不出错都会执行;

 

try {

  //需要捕获的代码块

} catch (e) {

  console.log(e.name + ": " + e.message);

  console.log(e.stack);

}finally{

    //do something...

}

 

 

name:错误名称

message:错误提示信息

stack:错误的堆栈(非标准属性,但是大多数平台支持)

 

1、SyntaxError //解析代码时发生的语法错误

2、ReferenceError //引用一个不存在的变量时发生的错误

3、RangeError //当一个值超出有效范围时发生的错误

4、TypeError //变量或参数不是预期类型时发生的错误

5、URIError //URI相关函数的参数不正确时抛出的错误

6、EvalError //eval函数没有被正确执行时,会抛出EvalError错误

 

 

throw语句的作用是中断程序执行,抛出一个意外或错误。它接受一个表达式作为参数,可以抛出各种值。

throw new Error("出错了!");

throw new RangeError("出错了,变量超出有效范围!");

throw new TypeError("出错了,变量类型无效!");

 

 

throw "Error!";// 抛出一个字符串

 

throw 42;// 抛出一个数值

 

throw true;// 抛出一个布尔值

 

throw {toString: function() { return "Error!"; } };// 抛出一个对象

JavaScript引擎一旦遇到throw语句,就会停止执行后面的语句,并将throw语句的参数值,返回给用户。

 

 

除了JavaScript内建的7种错误对象,还可以定义自己的错误对象。

function UserError(message) {

   this.message = message || "默认信息";

   this.name = "UserError";

}

 

UserError.prototype = new Error();

UserError.prototype.constructor = UserError;

上面代码自定义一个错误对象UserError,让它继承Error对象。然后,就可以生成这种自定义的错误了。

使用:

throw new UserError("这是自定义的错误!");