美文网首页
JS(1)数据类型

JS(1)数据类型

作者: G莫_小语 | 来源:发表于2019-04-06 15:06 被阅读0次
一、在“JavaScript”规范中,共定义了七种数据类型,分为“基本类型”和“引用类型”两大类
  • 基本类型(六种):字符串(String)、数字(Number)、布尔(Boolean)、唯一(Symbol)、(未定义)Undefined、空(Null)。
  • 引用类型(一种):对象(Object),对象又包含了Object、Function、Array、Date、RegExp等
二、基本包装类型(String、Number、Boolean)
  • 引用类型有方法和属性,但是基本类型是没有的,为了方便操作,给每一个包装类型提供了一个对应的包装对象
    var str = 'hello';        //  string 基本类型,本身不具备方法和属性
    var s1 = str.charAt(0);   //  在执行到这一句的时候 后台会自动完成以下动作

    // 1. 找到对应的包装对象,通过包装对象创建一个值相同的实例
    // var str = new String('hello');
    // 2. 调用这个实例的方法(通过原型继承调用包装对象的方法)
    // var s2 = str.chaAt(0);
    // 3. 销毁这个实例
    // str = null;

    console.log(s1);  // h
    console.log(str); // 还是hello不是null,注意这是一瞬间的动作,实际上我们没有改变字符串本身的值。就是做了下面的动作.这也是为什么每个字符串具有的方法并没有改变字符串本身的原因。
  • 引用类型与基本包装类型的区别
    它们的对象生命周期不同:
    引用类型:使用new创建引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。
    基本包装类型:自动创建基本包装类型的对象,只执行一行代码的瞬间之后就会立即销毁。
    这意味着在运行时为基本包装类型值添加属性和方法是无效的,只有在包装对象的原型上添加。
    var str = 'hello';
    
    str.name = 'jack';  // 添加之后马上销毁了,无效
    console.log(str.name);   // undefined

    String.prototype.age = 24;  // 在原型上添加
    console.log(str.age);   // 24
三、数据类型检测

    let s1 = 1;
    let s2 = '';
    let s3 = true;
    let s4 = undefined;
    let s5 = Symbol();
    let s6 = function test() { };
    let s7 = null;
    let s8 = [];
    let s9 = {};
    let s10 = new Date();
    let s11 = new RegExp();

    // 使用 typeof 运算符只能检测出七种
    console.log(typeof s1); // number
    console.log(typeof s2); // string
    console.log(typeof s3); // boolean
    console.log(typeof s4); // undefined
    console.log(typeof s5); // symbol
    console.log(typeof s6); // function
    console.log(typeof s7); // object
    console.log(typeof s8); // object 
    console.log(typeof s9); // object
    console.log(typeof s10);  // object
    console.log(typeof s11);  // object

    console.log('----------------------');

    // 使用 Object.prototype.toString(),全部能检测出来
    // Object.prototype.toString 最终会返回形式如 [object,class] 的字符串,class 指代的是其检测出的数据类型,这个是我们判断数据类型的关键。
    // toString === window.toString === Object.prototype.toString
    let judgeType = val => toString.call(val).slice(8, -1).toLowerCase();
    console.log(judgeType(s1)); // number
    console.log(judgeType(s2)); // string
    console.log(judgeType(s3)); // boolean
    console.log(judgeType(s4)); // undefined
    console.log(judgeType(s5)); // symbol
    console.log(judgeType(s6)); // function
    console.log(judgeType(s7)); // null
    console.log(judgeType(s8)); // array
    console.log(judgeType(s9)); // object
    console.log(judgeType(s10));  // date
    console.log(judgeType(s11));  // regexp

    console.log(s3.toString()); // "true"  自己原型上的 toString 方法是转成字符串


  • 为什么非要调用对象上的 toString 方法(Object.prototype.toString.call())而不调用自己原型上的 toString(s3.toString() ) 方法呢?因为自己原型上的 toString 方法重写了对象的 toString 方法,自己原型上的 toString 方法用处不一样

相关文章

  • 2022前端面试题汇总(附答案)更新中

    JS相关 1.JS中的数据类型 (1)数据类型分为基本数据类型和引用数据类型基本数据类型:number、null、...

  • JavaScript面向对象前置知识

    1、JS的组成 ECMAScript、DOM、BOM 2、JS基本数据类型和复杂数据类型 基本数据类型 strin...

  • JS题集

    1.JS有哪些数据类型? JS有七大数据类型: String, Symbel, Number, Boolean, ...

  • JS 面试题汇总

    说一下JS 中的数据类型有哪些 JS 数据类型包括 基本 / 引用 / 特殊 数据类型: 1.基本数据类型:Str...

  • js重点面试题

    1.js中有哪些数据类型,并解释清楚原始数据类型和引用数据类型 js中共有null , undefined , s...

  • JS深浅拷贝

    JS存储方式 JS中存在基本数据类型和引用数据类型1.基本数据类型:number,string,boolean,n...

  • js面试题

    1、js 数据类型 基本数据类型 引用数据类型 2、js 变量和函数声明的提升 在js中变量和函数的声明会提升到最...

  • JS中的栈内存堆内存

    1. JS 数据类型 首先我们来认识js的七种数据类型: 1.基本数据类型 2.引用数据类型 2. 什么是栈与堆 ...

  • 高级js

    1,JS中的数据类型: 基本数据类型StringNumberBooleanUndefinedNullsymbolb...

  • 1.预解释

    1.JS中的数据类型:

网友评论

      本文标题:JS(1)数据类型

      本文链接:https://www.haomeiwen.com/subject/qldriqtx.html