js之传值与传址/undefined和null/严格模式

LinMeng 等级 285 0 0
传值与传址

基本数据类型有五种---Undefined、Null、Boolean、Number和String 引用数据类型有两种----object,array,fn

  • 两种数据类型的区别:
    1. 存储位置不同 原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中; 引用数据类型直接存储在堆中,占据空间大,大小不固定,如果存储在栈中,将会影响程序运行的性能,引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后,从堆中获得实体。
  1. 传值方式不同 按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参; 按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。

说的简单点,就是

  1. 基本类型复制是值的复制,互相不受影响。下例中将a变量的值赋值给b变量后,因为基本类型变量是独立的所以a的改变不会影响b变量的值。
    let a = 100;
    let b = a;
    a = 200;
    console.log(b);   //100
  2. 对于引用类型来讲,变量保存的是引用对象的指针。变量间赋值时其实赋值是变量的指针,这样多个变量就引用的是同一个对象。
    let a = {
    web: "你好,世界"
    };
    let b = a;
    a.web = "hw";
    console.log(b);   // hw
    undefined
  • 对声明但未赋值的变量返回类型为 undefined 表示值未定义。
  • 对未声明的变量使用会报错,但判断类型将显示 undefined。
  • 我们发现未赋值与未定义的变量值都为 undefined ,建议声明变量设置初始值,这样就可以区分出变量状态了。
  • 函数参数或无返回值是为undefined
    function hw(web) {
    console.log(web); //undefined
    return web;
    }
    console.log(hw()); //undefined
    null
  • null 用于定义一个空对象,即如果变量要用来保存引用类型,可以在初始化时将其设置为null
    var hd = null;
    console.log(typeof hd);    //object
    严格模式
  • 严格模式可以让我们及早发现错误,使代码更安全规范,具有以下特点:
  • 基本差异
  1. 变量必须使用关键词声明,未声明的变量不允许赋值
  2. 强制声明防止污染全局
  3. 关键词不允许做变量使用
  4. 变量参数不允许重复定义
  5. 单独为函数设置严格模式
    function strict(){  
    "use strict";  
    return "严格模式";  
    }  
    function notStrict() {  
    return "正常模式";  
    }  

解构差异 6. 非严格模式可以不使用声明指令,严格模式下必须使用声明。所以建议使用 let 等声明。

收藏
评论区