​重学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
  • 如果对一个对象调用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

数字的摄入操作

  • 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

字符串转换成数字

  • parseInt()

  • parseFloat()

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

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
  • Instanceof

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

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

  • Object.prototype.toString.call()
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352