JS数据类型-mdn

数据类型:

  • 基本数据类型+引用数据类型
    • Boolean
      • 只有true、false两个值
    • String
      • String的意义不是‘字符串’,而是字符串的UTF16编码,国际标准中字符是以Unicode的方式表示的,UTF16和UTF8是Unicode的编码方式
      • String的最大长度是什么?受到编码长度的影响
      • 如何表示一个很长的数字?
        • Number

          • 整数和小数都只有一个Numebr类型,Number类型的数字是按照双精度浮点数的规则来的
          • 可能遇到浮点数运算的问题,所以不能直接对两个浮点数进行运算符 (浮点数精度问题
            • Math.round(`${+number}e${precision}`) / Math.pow(10, precision); 一般的解决方法是,将数字升级为整数,乘以10的几次幂,为计算机能够精确识别的整数,再降级乘以10的几次幂

            • 1.335.toFixed(2) // 1.33错的 ; Math.round(1.335e2) / Math.pow(10,2) //1.34对的

            • 在JavaScript中,我们通过在数字后面加上字母"e"并指定零计数来缩短数字:https://javascript.info/number"e"将数字乘以1给定的零计数。1e3 = 1 * 1000 ; 1.23e6 = 1.23 * 1000000
    • Undefined
      • undefined也是全局的变量,所以有的编程规范会使用void 0来替代undefined,因为很容易被改变。而且使用void 0进行运算编译的时间比undefined断,查看其他博文显示。
      • undefined和null在JS中都表示无,这里追本溯源是因为,在java中null表示对象,但是创始人觉得null无法代表基本数据类型的无,所以创造了undefined
      • undefined和null几乎一样,但是在转数字上undefined会转为NaN,null会转为0
    • Null
      • 只有一个值null
    • Symbol
    • Object
  • 对象类型包括:
    • Object
    • Array
    • Function
    • String
    • Boolean
    • Number
    • Date
    • RegExp
    • Error
    • ...

区别:

  • 3和new Number(3)的区别?
    • 一个是Number类型,一个是对象类型
  • JS内存空间:堆栈
    • 栈内存: 存放基本数据类型,和引用数据类型的指针
    • 堆内存:存放引用数据类型(对象)和闭包
    • 池:存放常量
  • 变量的复制
    • 基本数据类型:直接在栈中重新开启空间给赋值的变量
    • 引用数据类型,在栈中添加一个变量和指针指向堆中的对象;所以对属性的操作会影响原对象

问题?

1. - null和undefined:为什么JS中有两个表达‘无’的数据类型?

- 为什么有的编程规范要求用void 0 代替undefined?

null vs undefined

2. ES6新增加的Symbol是什么东西?

3. 字符串有最大长度吗?

  • 因为JS是UTF16的编码方式, 所以字符串的长度受到编码长度的影响

4. 为什么给对象添加的方法能用在基础数据类型上?

  • 运算符提供了装箱操作(把基本数据类型转为为对应的对象),它会根据基础类型构造一个临时对象,使我们能在基础类型上调用对应对象的方法。

考点:

  • 为什么console.log(0.1+0.2 == 0.3) 输出false
    • 因为JS类型为Number的数字是按照双精度浮点数的规则,浮点数的特点是不能使用==或===进行比较。这是浮点数的特点
    • 所以错误不是false的结论而是比较的方法错了,可以使用ES6提供的最小精度值进行比较console.log(Math.abs(0.1+0.2-0.3) < Number.EPSILON)
  • 深拷贝/浅拷贝
    • 了解原理
  • 数据类型的判断
    1. typeof
      • 用于判断基本数据类型和function
    2. A instanceof B
      • 用于判断对象的类型
      • 判断构造函数B的prototype是否在实例对象A的原型链上。如果在则A是B的实例对象,返回true
        • 但是不能判断数组;(因为Object的prototype间接的在原型链上)
        • [] instanceof Array  //true
          [] instanceof Object //true
    3. Array.isArray() 判断数组
    4. Object.prototype.toString.call(x)
      • 判断所有的数据类型
      • ,返回的类型格式为[object,xxx],xxx是具体的数据类型
        • Number/String/Boolean/Undefined/Null/Function/Array/Object/RegExp/Date/Error/HTMLDocument/Window
      • 原因:每个类型都有toString方法,都对其进行了重写
  • 原型链(对象属性的查找)
    1. 每个对象都有与之相关联的对象,为了查找对象的属性
    2. 实例对象的__proto__ = 构造函数的prototype; 即实例对象的原型链
  • 闭包 (函数对象)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值