美文网首页前端开发程序员IT@程序员猿媛
你真的懂JavaScript基础类型吗

你真的懂JavaScript基础类型吗

作者: zhongmeizhi | 来源:发表于2019-04-03 11:46 被阅读0次

夯实Javascript基础。

基本类型有六种: null,undefined,boolean,number,string,symbol。

基本类型的值是保存在栈内存中的简单数据段

基础类型特性

基础类型最重要的特性

  • 基础类型是不变的
    • 因此:基础类型没有splice,sort之类的直接改变变量的方法
    • 强行改变基础类型会报错
      // str 不能调用 Array的 sort 和 splice
    
      Array.prototype.sort.call('strxyz');
      // Uncaught TypeError: Cannot assign to read only property '2' of object '[object String]'
    
      Array.prototype.splice.call('strxyz');
      // Uncaught TypeError: Cannot assign to read only property 'length' of object '[object String]'
    
    
      // object 可以使用 Array的sort 和 splice
    
      Array.prototype.sort.call({x: 1, y: 2});
      // {x: 1, y: 2}
    
      Array.prototype.splice.call({x: 1, y: 2});
      // []
    
  • 基础类型没有__proto__没有属性
      str.x = 1;
      console.log(str.x); // undefined
    
  • 所有对基础类型属性的访问都是访问的基本包装类型(String、Number、Boolean)
      当你调用 `str.length` 时,实际过程是这样的:
      - 创建String类型的一个实例
      - 在实例上调用指定的方法
      - 销毁这个实例
    
      var str = 'abc';
      var _str = new String(str);
      var len = _str.length;
      _str = null;
      console.log(len);
    

其他特性

  • typeof null === 'object'
    • (历史遗留问题,因为000开头表示对象,而null全是0)
  • 条件判断时 undefined null false NaN '' 0 -0 为 false,其他都为 true
    • (条件判断时会隐式转换为Boolean)
  • JS只有浮点类型(double),没有整型
    • 1 === 1.0
  • NaN 也属于 number 类型,并且 NaN 不等于自身。
    • var a = NaN; a !== a;
  • String 类型是类数组,具有iterator
    • typeof String('x')[Symbol.iterator] === 'function'

基础类型检测

检测基础类型用 typeof

  // typeof 只适合检测 基础类型

  typeof new Date() // 'object'
  typeof [] // 'object'
  typeof {} // 'object'
  typeof console.log // 'function'

基础类型转换

基本类型转换时,首先会调用 valueOf,然后调用 toString。并且这两个方法可以重写。

  var a = 1;

  var obj = {x: 1};
  obj.toString === '[object Object]';

  var arr = [2, 3];
  arr.toString() === '2,3';

  a + obj === '1[object Object]';
  a + arr === '12,3';

Symbol.toPrimitive该方法在转基本类型时调用优先级最高。

  let a = {
    valueOf() {
      return 1;
    },
    toString() {
      return '2';
    },
    [Symbol.toPrimitive]() {
      return 3;
    }
  }

  1 + a // => 4

四则运算

  • 在四则运算中,除了'+' 其他操作都会以数字进行计算
  • 如果是 + 运算,如果不是所有字面量都是number,那么会转换为字符串(toString)进行拼接

End

持续更新中,Github信息更多哦,你的⭐是我最大的支持。查看详情

相关文章

  • 你真的懂JavaScript基础类型吗

    夯实Javascript基础。 基本类型有六种: null,undefined,boolean,number,st...

  • JS知识 - 收藏集 - 掘金

    你真的懂 JavaScript 的正则吗? - 掘金本文内容主要出处为《JavaScript权威指南》(第六版),...

  • 5-javascript基础

    javascript基础 javascript基础类型 基本数据类型:String,boolean,Number,...

  • JavaScript你真的懂函数吗?

    函数的定义,3种声明方式 匿名函数 // var fn = function(){xxx}//虽然它是匿名函数但是...

  • Javascript 数据类型检测及原理

    前言 数据类型检测是 JavaScript 中既基础又考验原理的知识,如果你对 JavaScript 数据类型检测...

  • Typescript基础知识

    Typescript 就是 Javascript 的超集,所以首先你要知道 Javascript 基础知识 类型注...

  • JavaScript 变量和类型篇

    一、JavaScript基础 变量和类型 1.JavaScript规定了几种语言类型 JavaScript中的每一...

  • 你真的懂JavaScript

    放在前面,本文原文的标题是 So you think you know JavaScript? 在下感觉有些标题党...

  • JS基础

    JavaScript概述 、 JavaScript基础语法 、 变量和常量 、 数据类型 数据类型转换 、 运算符...

  • JavaScript深拷贝 浅拷贝

    JavaScript深拷贝 浅拷贝 JavaScript 数据类型分为两种: 基础类型:像Number、Strin...

网友评论

    本文标题:你真的懂JavaScript基础类型吗

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