第2章 JavaScript数据类型--1(概述和基本数据类型)—读书笔记
目录
2.1 JavaScript数据类型
1 数据类型
基本数据类型(五种):Undefined、Null(空对象的引用)、Boolean(布尔值)、Number(数值)、String(字符串)
一种复杂数据类型:Object
备注:ES6中添加数据类型Symbol
2 扩展
对象是最复杂的数据类型,又可以分成三个子类型:
狭义的对象(object)
数组(array)
函数(function)
注意:除非特别声明,本教程的“对象”都特指狭义的对象。
2.2 Undefined类型和Null类型
1 概念
Undefined类型:只有一个值undefined,表示未定义。
Null类型:只有一个值null,表示对空对象的引用。
2 对于尚未声明的变量,只能执行typeof操作符检测其类型(虽然也能执行delete,但无意义),且返回undefined。
3 注意
1)在if语句中undefined和null会被自动转换成false
2)在相等(==)运算符中,两者相等
"use strict"; //表示严格模式
|
4 返回“undefined”场景,一共四种。
"use strict"; //表示严格模式 |
2.3 Boolean类型
1 两个值:true 和false
2 Boolean:调用函数Boolean()可以将任何值转换为Boolean值。其中转换为false规则:
Undefined:undefined
Object :null
Boolean:false
Number:0和NaN
String:””(空字符换)
"use strict"; //表示严格模式 |
3 注意
空数组([])和空对象({})对应的布尔值,都是true。
2.4 Number类型
1 JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算
"use strict"; //表示严格模式 console.log(2 === 2.00) //true |
2 浮点数值
表示方法:小数点和科学计数法
注意:永远不要测试某个特定浮点数值(0.1+0.2不等于0.3)
"use strict"; //表示严格模式 |
3 数值精度
根据国际标准 IEEE 754,JavaScript 浮点数的64个二进制位,从最左边开始:
第1位:符号位,0表示正数,1表示负数。决定正负
第2-12位(共11位):指数部分,大小为0-2047。决定数值的大小
第13-64位(共52位):小数部分(即有效数字),决定数值的精度
注意:精度最多只能到53个二进制位,这意味着,绝对值小于2的53次方的整数,即-253到253,都可以精确表示。
4 数值范围
则 JavaScript 能够表示的数值范围为21024到2-1023(开区间),超出这个范围的数无法表示。
1)最小值保存在:Number.MIN_VALUE
2)最大值保存在:Number.MAX_VALUE
3)超出数值范围就会自动变为Infinity,正数变为Infinity,负数变为-Infinity。
注意:使用isFinite()判断是否为正负无穷,如果是数值范围内,则返回true
5 数值表示法
1)字面表示法
十进制:如165
十六进制:如Ox2f
2)科学计数法
JS自动将数值转换成科学计数法情况:小数点前的数字多于21位。小数点后的零多于5个。
6 数值的进制(四种)
十进制
八进制:前缀为“0o”或者“0O”。(另外也用“0”,严格模式和ES6废除这种方式)
十六进制:前缀为“0x”或“0X”
二进制:前缀为“0b”或“0B”
注意:默认情况下,JavaScript 内部会自动将八进制、十六进制、二进制转为十进制。如果八进制、十六进制、二进制的数值里面,出现不属于该进制的数字,就会报错
7 零:-0,+0
"use strict"; |
1) 相同点
JavaScript 内部实际上存在2个0:一个是+0,一个是-0,区别就是64位浮点数表示法的符号位不同。它们是等价的。几乎所有场合,正零和负零都会被当作正常的0。
2)区别
唯一有区别的场合是,+0或-0当作分母,返回的值是不相等的。
8 NaN
1)意义:非数值,表示本来用来返回数值的操作数未返回数值的情况
"use strict"; console.log(0 / 0) ; //NaN console.log(typeof NaN) ; //number |
2)特点:
数组的indexOf
方法内部使用的是严格相等运算符,所以该方法对NaN
不成立;
与任何值都不相等,包括自己;
NaN与任何数(包括它自己)的运算,得到的都是NaN。
NaN在布尔运算时被当作false。
"use strict"; //表示严格模式 |
3)isNaN()
函数确定该值是不是NaN。该函数接收到参数之后,就会尝试转换为数值,如果不能,返回false
9 Infinity(正无穷)-Infinity(负无穷)
1)Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN);
2)Infinity与NaN比较,总是返回false。
3)运算规则
A 符合无穷的数学计算规则
B 0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity。
C Infinity加上或乘以Infinity,返回的还是Infinity。
D Infinity减去或除以Infinity,得到NaN。
E Infinity与null计算时,null会转成0,等同于与0的计算。
F Infinity与undefined计算,返回的都是NaN。
"use strict"; |
10 与数值相关的方法
1) Number():用于任何数据类型
转换规则
2)parseInt()
将字符串转为整数。一个或者两个参数,第一个是需要转换的字符串str,第二个是转换时使用的基数(进制数)(可以省略)。如果parseInt()的参数不是字符串,则会先转为字符串再转换。
A) 忽略前面空格,如果第一个字符不是数字或者负号,则返回NaN。使用parseInt(“ ”)(空字符串)会返回NaN。
字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
"use strict"; //表示严格模式 |
B) 无论基数是哪个,最后结果都会转换成十进制。parseInt()的返回值只有两种可能,要么是一个十进制整数,要么是NaN。
基数为十进制:
基数为八进制:
基数为十六进制:如果指定进制为16进制,则字符串可以省略“0X/0x”
基数为二进制:
对于那些会自动转为科学计数法的数字,parseInt会将科学计数法的表示方法视为字符串,因此导致一些奇怪的结果。
"use strict"; //表示严格模式
|
C)parseInt方法还可以接受第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。默认情况下,parseInt的第二个参数为10
如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回NaN。如果第二个参数是0、undefined和null,则直接忽略。
D)
"use strict"; |
3) parseFloat():将一个字符串转为浮点数。
专门用于字符串,只解析十进制,只有一个参数。如果是十六进制格式的字符串转换,则返回0
"use strict"; //表示严格模式 |
如果字符串符合科学计数法,则会进行相应的转换;
如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分;
parseFloat方法会自动过滤字符串前导的空格;
如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN;
parseFloat会将空字符串转为NaN。
4) isNaN()
A)isNaN方法可以用来判断一个值是否为NaN。
B)注意:isNaN只对数值有效,如果传入其他值,会被先转成数值。比如,传入字符串的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别引起注意。也就是说,isNaN为true的值,有可能不是NaN,而是一个字符串。如下:
对于对象和数组,isNaN也返回true。
对于空数组和只有一个数值成员的数组,isNaN返回false。
C)使用isNaN之前,最好判断一下数据类型。
D)判断NaN更可靠的方法是,利用NaN为唯一不等于自身的值的这个特点,进行判断。
5)isFinite()
isFinite()方法返回一个布尔值,表示某个值是否为正常的数值。返回false规则: Infinity、-Infinity、NaN和undefined这几个值会返回false
2.5 String类型
1 字符串:由0个或多个Unicode字符序列构成,用双引号和单引号括起来都行。
2 字符字面量
1)特殊的字符:转义序列“\”
其实反斜杠还有以下三种用法
\HHH:反斜杠后面紧跟三个八进制数(000到377),代表一个字符。
\xHH:\x后面紧跟两个十六进制数(00到FF),代表一个字符。
\uXXXX:\u后面紧跟四个十六进制数(0000到FFFF),代表一个字符。
2)length属性:字符串长度,该属性无法改变
var str = "aubf"; |
注意:格
模3)多行字符串
如果字符串必须分为多行,可以在每一行的尾部使用反斜杠“\”,输出还是一行。
连接运算符(+)可以连接多个单行字符串,将长字符串拆成多行书写,输出的时候也是单行。
3 字符串特点:不可变
4 字符集
JavaScript 使用 Unicode 字符集。JavaScript 引擎内部,所有字符都用 Unicode 表示。
每个字符在 JavaScript 内部都是以16位(即2个字节)的 UTF-16 格式储存。也就是说,JavaScript 的单位字符长度固定为16位长度,即2个字节。JavaScript 对 UTF-16 的支持是不完整的,由于历史原因,只支持两字节的字符,不支持四字节的字符
5 base64编码
6 转换成字符串
1)toString(),一般是某某值“.”调用
数值、布尔值、对象、字符串有该方法,但null和undefined没有。
在调用数值的toString()时,可以指定一个参数,为返回数值的基数(即进制数),默认为十进制数
"use strict"; //表示严格模式 |
2)String()转型方法,传入的参数是需要转型的值
A)用于任何类型。
B)转换规则:
如果值有toString()方法,则调用该方法;
如果值是null,则返回“null”;
如果值是undefined,则返回“undefined”
"use strict";
|
如有错,请指出,如有侵权,请联系我,谢谢!
参考资料
1 JavaScript 教程https://wangdoc.com/javascript/basic/grammar.html
2 《JavaScript高级程序设计 第3版》