ES基础知识点——(类型篇)

  • 变量类型前端

    • JS的类型分类和判断
    • 值得类型和引用
  • 原型与原型链(继承)数组

    • 原型和原型链的定义
    • 继承写法
  • 做用域和闭包安全

    • 执行上下文
    • this
    • 闭包是什么
  • 异步闭包

    • 同步VS异步
    • 异步和单线程
    • 前端异步的场景
  • ES6/7新标准的考察架构

    • 箭头函数
    • Module
    • Class
    • Set和Map/WeakSet和WeakMapuuu
    • Promise

变量类型

变量分类

JavaScript 是一种弱类型脚本语言,所谓弱类型指的是定义变量时,不须要什么类型,在程序运行过程当中会自动判断类型。异步

最新的 ECMAScript 标准定义了8种数据类型:函数

  • 七种基本数据类型:this

    • Boolean,有2个值分别是:true 和 false.
    • null , 一个代表 null 值的特殊关键字。 JavaScript 是大小写敏感的,所以nullNullNULL或变体彻底不一样。
    • undefined ,和 null 同样是一个特殊的关键字,undefined 表示变量未定义时的属性。
    • Number(数字),整数或浮点数,例如: 42 或者 3.14159
    • BigInt (任意精度的整数) ,能够安全地存储和操做大整数,甚至能够超过数字的安全整数限制。
    • String(字符串),字符串是一串表示文本值的字符序列,例如:"Howdy" 。
    • Symbol(表明) ( 在 ECMAScript 6 中新添加的类型).。一种实例是惟一且不可改变的数据类型。
    • Object(对象)

注意:原始类型不包含 Object,因此原始类型有七种。spa

变量判断

typeof类型判断

typeof xxx 获得的值有如下几种类型:undefinedbooleannumberstringobjectfunctionsymbol,比较简单,再也不一一演示了。这里须要注意的有三点:线程

  • typeof null 结果是 object,实际这是 typeof 的一个bug,null 是原始值,非引用类型。
  • typeof [1, 2] 结果是 object,结果中没有 array 这一项,引用类型除了 function 其余的所有都是 object
  • typeof Symbol()typeof 获取 symbol 类型的值获得的是 symbol,一种实例是惟一且不可改变的数据类型,这是 ES6 新增的知识点。

instanceof继承判断

用于实例和构造函数的对应。例如判断一个变量是不是数组,使用typeof没法判断,但可使用[1, 2] instanceof Array来判断。由于,[1, 2]是数组,它的构造函数就是Array。同理:

function Dog(name) { 
    this.name = name
}
var hashiqi = new Dog('哈士奇') 
console.log(hashiqi instanceof Dog) `

值类型与引用类型

除了原始类型,ES 还有引用类型,上文提到的 typeof 识别出来的类型中,只有 objectfunction 是引用类型,其余都是值类型。注意:Symbol 也是值类型,实例的惟一标识

值类型的赋值
var a = 1;
var b = 2;
b = a;
a++;
b++;
console.log('a',a);
console.log('b',b);
// 打印结果:
a 2
b 2

上述示例中,a , b 为值类型,在a赋值给b的时候,b的值修改成了1,a++,与b++以后,a、b成为了2。

引用类型的赋值
var a = {name:'张三',age:4};
var b = {name:''王五,age: 12};
a = b;
a.age++;
console.log('a', a); 
console.log('b', b);
// 打印结果
a {name:'王五',age: 13}
b {name:'王五',age: 13}

上述示例中,a , b为引用类型,在b赋值给a的时候,a的地址指向了b,因此a: {name:'王五',age: 12},a的年龄加上后就变为了12而非5。

这就是由于Number类型的a是按值传递的,而Object类型的b是按引用传递的。

如图所示:
i&o进销存管理系统架构图.png

num1 与 str1 是值类型,obj 是引用类型,从图来看应该就知道值类型与引用类型赋值时的区别了,而引用类型采用这种方式也大大节约了内存,毕竟一大大的对象过多会致使这样的问题。

相关文章
相关标签/搜索