前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​重学Javascript之数据类型

​重学Javascript之数据类型

原创
作者头像
行百里者半九十
修改2020-07-27 10:06:57
1.2K0
修改2020-07-27 10:06:57
举报
文章被收录于专栏:Javascript学习Javascript学习

Number类型

在Javascript,数值类型包括整数、浮点数。不管是什么类型,在js中都是使用64为来存储数值。这些数值因为分为正数和负数,因此64位内存既要用来存储正数,也要能存储负数。在这64位中,52位保存整数,11位保存小数,剩下的1位为符号位。

对于整数而言,除了可以使用常用的十进制来表示之外,还可以使用八进制和十六进制。

八进制是以数字0开头的数字,如012是10的八进制表示

注意,如果0后面的数字超出范围,会以十进制来进行解析。

十六进制是以数字0和x开头的数字,后面的数字可以0-9, a-f的任意组合

  • 特殊的数值——infinity  -infinity 以及NaN
  • infinity表示能表示的最大数值
  • -infinity表示js能表示的最小数值
  • NaN: 代表一个计算错误。他是一个不正确的或者是一个未定义的数学操作所得到的结果。
  • 对于NaN,可以通过isNaN来判断是否”不是数值“。接受一个参数。将接受的参数转换为数字,然后再判断是不是NaN
image.png
image.png
image.png
image.png
  • 如果对一个对象调用isNaN,或者对其进行整数操作,首先会调用对象的valueOf()方法
  • 与此类似的有isInfiite() , 将参数转换为数字,常规数字 -> true  否则 ->  false

还有一个常用的比较方法: Object.is().他基本与 ===相同,只有两点不同: Object.is(NaN, NaN) === true ;  Object.is(0, -0) === false

  • toString(base)

通过num.toString(base) 可以将数字转换为特定base进制的字符串。

image.png
image.png
数字的摄入操作
  • Math.floor()  向下取整
  • Math.ceil()  向上取整
  • Math.round()   就进取整
  • Math.trunc()   移除小数点后的所有内容,没有舍入
不精确的计算
  • 这里有一个常见的问题: 为什么0.1 + 0.2 !== 0.3
  • 原因: 数据在内存中是以二进制进行存储的,0.1 和 0.2转换成二进制都是无限循环小数。而在JS中,小数位的精度为17位,超过的话会进行舍入,从而造成舍入误差。
  • 如何解决?  通过toFixed(n) 进行解决。通过toFixed(n)可以对结果进行舍入,保留n个小数位,且返回的结果为字符串。
image.png
image.png
image.png
image.png
字符串转换成数字
  • parseInt()
  • parseFloat()

在这里,他们接受一个字符串,从字符串中第一个数字位开始读取,直到遇到一个非数字位。parseInt()还可以接受第二个参数,表示以多少进制解析字符串

image.png
image.png

小操作: 在字符串之前加上+ , - 可以把字符串立即转换成数值。

String类型

现在的字符串表示形式主要有三种方式:

  • 单引号
  • 双引号
  • 模板字符串的形式(abcd

模板字符串是ES6中出现的。作为新出现的特性,必定是为了解决以前存在的一些痛点,及做了扩展。

主要有两种:

  • 可以实现多行文本。

之前的字符串,要实现换行,一般都是在文本中要换行的地方插入 \n 。这种方式很不方便。

  • 可以让我们较为自由的插入变量。

一般我们的字符串字面量一旦创建就不会也不能再发生改变。而在模板字符串中,通过使用占位符${var}可以实现将变量嵌入到字符串中。更为具体地说,不仅仅可以插入变量,只要是JS表达式,都可以进行插入。

  • 标签模板。可以在模板字符串前加上一个标签模板,可以是一个函数。

调用toString()方法,将其他值转换成字符串的值。

NULL

仅仅代表 ”空“,“无” 或者 “值未知”。

Undefined

表示一个值,已经声明但是未被赋值。

注意 undefined和undeclared的区别:

undefined表示已经被声明了,只是这个变量还没有被赋值。undeclared表示连声明都没有。所以,虽然基本类型中没有undeclared,但是要注意区别。

Object类型

对象类型,其实就是一组键值对。他可以通过对象字面量创建,也可以通过new操作符来创建。

每个Object的实例都具有一下几种属性:

  • Constructor : 指向创建该对象实例的函数。
  • hasOwnProperty() : 检查特定属性书不是在当前对象实例中(而不是在原型中)
  • isPrototypeOf(object) : 用于判断传进来的对象是不是当前对象的原型。
  • toLocalString() : 返回对象的字符串表示。与当地对应。
  • toString() : 对象的字符串表示
  • valueOf() : 返回对象的数值,字符串或布尔值表示。
  • propertyIsEnumerable(proname) : 当前对象的属性能不能通过for-in来枚举。

Symbol

主要用于定义唯一的标识符。

如何判断数据的类型

  • Typeof  
image.png
image.png
  • Instanceof 

如果想要判断一个对象的具体类型,可以通过 obj instanceof Obj 来进行判断。

原理: 判断Obj是不是在obj的原型链上。

  • Object.prototype.toString.call()
image.png
image.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Number类型
    • 数字的摄入操作
      • 不精确的计算
        • 字符串转换成数字
        • String类型
        • NULL
        • Undefined
        • Object类型
        • Symbol
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档