js学习笔记(三)

Posted by wodelu on March 15, 2018

JS学习笔记(三)

类型系统

  • Undefined,Null,Boolean,Number,String等物种类型是原始类型。 这些类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的。
  • Object类型为引用类型。引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。 如上图所示:栈内存中存放的只是该对象的访问地址,在堆内存中为这个值分配空间。

Undefined类型 (undefined)

  • 已声明未赋值的变量
    var a; //a的类型是undefined
    
  • 获取对象不存在的属性
    var Obj = {a:1};
    Obj.b; //类型为Undefined
    
  • 无返回值的函数的执行结果
    function a() {
    alert(1);
    }
    var b = a(); //b的类型为undefined
    
  • 函数的参数没有传入
    function a(i,j) {
    console.log(i);
    console.log(j);
    };
    a(1); //类型为undefined
    

    类型转换:

Null类型 (null)

  • 表示对象不存在
    document.getElementById("a");
    //若id = a不存在,则类型为null
    

    类型转换:

Boolean类型 (true、false)

  • 条件语句导致的隐式类型转换
    if(...){...} else {...}
    
  • 变量定义
    true;
    var a = false;
    

    类型转换:

String类型

类型转换:

Number类型

类型转换:

Obiect类型

  • Object是一组属性的集合(var obj = {name:’jerry’,age:10};)

类型转换:

类型识别

1、typeof

  • 可以识别标准类型,除了NaN
  • 不能识别具体的内置对象,除了function

2、Object.prototype.toString

  • 可以识别标注类型和内置对象类型
  • 不能识别自定义类型,如function

3、constructor (构造器中的方法)

  • 可以识别标准类型,Undefined、Null除外
  • 可以识别内置对象类型
  • 可以识别自定义对象类型

4、Instanceof

  • 可以识别内置对象类型
  • 不能识别原始类型
  • 可以识别自定义对象类型

变量作用域 (生命周期、作用范围)

解析方式:

 静态作用域:由程序定义位置决定,不考虑执行顺序
动态作用域:程序运行时刻决定 - JS使用静态作用域,且没有块级作用域 - 一段代码执行前,先初始化词法环境

运算符和表达式

    1、算数运算符:+ - * / %
    2、关系运算符:> < ==(对象或值) != >= <= ===(类型及值) !==
    3、逻辑运算:&& || !
    4、位运算符:&(按位与)|(按位或) ^(异或) ~(按位取非) <<(左移一位) >>(右移一位)
    5、赋值运算 =
    6、条件运算 ? :
    7、逗号运算 ,
    8、对象运算符:new delete .和[] (取对象属性) instanceof(判别自定义对象类型)
    注:
    null == undefined
    null/undefined进行 == 运算时不进行隐式类型转换
    逻辑运算中,!x 表示取boolean值后取反,!!x取x的boolean值
    优先级:算数运算符 > 逻辑运算符 > 条件运算符

语句

1、循环语句

  • for/in 循环控制,用于遍历(遍历对象属性)
  • continue 退出此循环并进入下一个循环
  • break 退出整个循环

2、异常处理语句
try/catch/finally throw

3、with语句

  • 用于缩短特定情况下必须写的代码量
  • 暂时改变变量的作用域链,将with语句中的对象添加到作用域链的头部