js1—day02—数据类型及Number()
JavaScript的数据类型分类:
- 原始类型:数字、字符串、布尔值、null(空)、undefined(未定义);存储于栈内存。
- 引用类型(也称对象类型):原始类型之外的类型,如数组、对象、函数等;存储于堆内存。
typeof 操作符:(typeof是一个操作符而不是函数)
- “undefined”——如果这个值未定义
- “boolean”——如果这个值是布尔值
- “string”——如果这个值是字符串
- “number”——如果这个值是数值
- “object”——如果这个值是对象或 null
- “function”——如果这个值是函数
( typeof操作符的操作数可以是变量(message),也可以是数值字面量)
例子:
var address;
console.log(typeof address );
注: 调用 typeof null会返回"object";typeof 的返回值都是String
Undefined类型(Undefined 类型只有一个值,即特殊的 undefined):在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined对于尚未声明过的变量,只能执行一项操作,即使用 typeof 操作符检测其数据类型(对未经声明的变量调用 delete 不会导致错误,但这样做没什么实际意义,而在严格模式下会导致错误)
Null类型(null类型只有一个值,null):(使用 typeof 操作符检测 null 值时会返回"object")
区别:
- null:(用来描述空值)
- typeof null:返回的是字符串object,也就是说可以把null看成一个特殊的对象;
通常来讲我们把null看成他自有类型的唯一成员; - undefined:(表明变量没有初始化)
如果函数没有返回值,则返回undefined;
typeof undefined:返回的是字符串undefined;
==认为NULL和undefined是相等的;===则返回false
Boolean类型(只有两个字面值: true 和 false):字面值 true 和 false 是区分大小写的,True 和 False是标识符
Number类型:
整数数值 、 浮点数值 (浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数)
解决精度问题:
- 转化成整数进行计算
- 设定保留的小数位tofixed,实际开发过程中保留 2~3位小数位足够了
- 转化成整数Math.floor(a)、Math.ceil(a)
- 频繁需要精确计算,利用第1种方法的思想自定义
运算函数
- (a. 存储比较–>例如,转化为字符串进行存储;
- b. 计算情形–>对于整数,前端出现问题的几率比较低,毕竟很少有业务需要需要用到超大整数,只要运算结果不超过 Math.pow(2, 53) 就不会丢失精度。)
NAN :
-
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况
-
0 除以 0 会返回 NaN,正数除以 0 返回 Infinity,负数除以 0 返回-Infinity
-
任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN; NaN 与任何值都不相等,包括 NaN 本身
-
在基于对象调用 isNaN()函数时,会首先调用对象的 valueOf()方法,然后确定该方法返回的值是否可以转换为数值。
如果不能,则基于这个返回值再调用 toString()方法,再测试返回值。 -
转换成数字类型: +(加)、-(减)、*(乘)、/(除),会把类型转换成数字
Number()函数的转换规则
- 如果是数字值,只是简单的传入和返回。
- 如果是 Boolean 值, true 和 false 将分别被转换为 1 和 0。
- 如果是 null 值,返回 0。
- 如果是 undefined,返回 NaN。
- 如果是字符串:
- 字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"会变成 1, “123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);
- 如果字符串包含有效的浮点格式,如1.1,则转换为相应浮点数值(同样忽略前导 0)
- 如果字符串中包含有效的十六进制格式,例如"0xf”,则将其转换为相同大小的十进制整数值;
- 如果字符串是空的(不包含任何字符),则将其转换为 0;
- 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN - 如果是对象,则调用对象的 valueOf()方法:然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。
parseInt() 函数:
- parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号, parseInt()就会返回 NaN。如果第一个字符是数字字符, parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字。
parseFloat() 函数:
- 从第一个字符(位置 0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止
- 如果值有 toString()方法,则调用该方法(没有参数)并返回相应的结果;
如果值是 null,则返回"null";
如果值是 undefined,则返回"undefined"
parseInt() 函数与parseFloat() 函数的区别:
-
parseFloat()与 parseInt()的第二个区别在于它始终都会忽略前导的零。
-
转换为字符串 : 第一种是使用几乎每个值变量都有的 toString()方法(但 null 和 undefined 值没有这个方法)
语法转换–多行字符串: 用反引号 ...
表示
语法转换–模板字符串 : 可以用+号连接
indexOf :
字符串的索引从0开始,
第一个字符的位置是0,
第二个是1,以此类推。
str[2]表示字符串str的第三个字符。
indexOf() 方法: 可返回某个指定的字符串值在字符串中首次出现的位置:
stringObject.indexOf(searchvalue,fromindex)
substring() 方法: 用于提取字符串中介于两个指定下标之间的字:stringObject.substring(start,stop)
Subslice: 接收负数参数,截取顺序–从左往右截取:
slice(start,end)
trim : 从字符串中移除前导空格、尾随空格和行终止符
stringObj.trim();
charAt : 第一个字符位置为 0, 第二个字符位置为 1,以此类推:
string.charAt(index)