js数据类型
简单数据类型:Undefined Null Boolean Number String
复杂数据类型:Object(由一组无序的名值对组成)
typeof操作符
- undefined —— 值未定义
- boolean —— 布尔值
- string —— 字符串
- number —— 数值
- object —— 对象或null
- function —— 函数
Undefined类型
var声明未初始化的值,对未初始化和未声明的变量执行typeof操作都会返回undefined值
用途:
- 比较
- 区分空对象指针与未初始化的变量
Null类型
null表示空对象指针
用途:定义的变量准备在将来用于保存对象
Boolean类型
true和false:
- true不一定等于1,false也不一定等于0;
- 区分大小写,大写的True和False都不是布尔值;
调用boolean()函数转换规则:
数据类型 | true | false |
Boolean | true | false |
String | 非空字符串 | ""(空字符串) |
Number | 非零数值(包括无穷大) | 0和NaN |
Object | 对象 | null |
Undefined | 不适用 | undefined |
Number类型
IEEE754G格式表示整数和浮点数,为支持各种数据类型,定义了不同的数值字面量格式:
- 十进制;
- 八进制,第一位必须是0,后是八进制的数字序列0~7,如超出范围,前导零将被忽略,后面的值则被当做十进制解析(在严格模式下无效,js引擎会抛出错误);
- 十六进制,前两位必须是0x,后跟(0~9及A~F)的十六进制数,A~F可大写可小写;
- 在算数计算时,八进制和十六进制的数值都将转换成十进制数值;
1、浮点数值
数值中必须包换一个小数点,且小数点后面必须有位数字;
保存浮点数值需要的内存空间是保存整数的两倍,因此ECNAScript会将浮点数转换为整数;
对于极大或极小的数值,用e(科学计数法)表示浮点数:
//数值(整数或浮点数),中间字幕e,后面是10的幂中的指数,该幂值用来与前面的数相乘 var n = 3.125e7 // 等于31250000 //极小数值,如0.00000000000000003 == 3e-17 //浮点数最高精度是17位小数,但在进行运算时,其精确度远不如整数,列入: 0.1+0.2 = 0.30000000000000004 //而不是0.3 //因此永远不要测试某个特定的浮点数
2、数值范围
最小数值:Number.MIN_VALUE (5e-324);
最大数值:Number.MAX_VALUE (1.7976931348623157e+308);
计算操出js数值范围,则被自动转换成特殊的Infinity或-Infinity,且不能参与下一次的计算
isFinite()函数确定是不是位于最小和最大的中间,是,则返回true,反之返回false;
3、NaN
非数值,是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况
特点:
- 任何涉及NaN的操作,都会返回NaN;
- NaN与任何值都不相等,包括NaN自身;
isNaN()函数,接受任何类型的一个参数,结果是确定这个参数是否“不是数值”,接受一个参数:
- 参数是字符串数值,则在后台对这个值转换为数值;
- 参数是布尔值,则转换为0或1;
- 参数是对象,则先调用valueOf(),得到是否可以转换为数值,如果不能,则在调用toSting(),在返回值;
0 除以 0 返回NaN;正负数 除以 0 返回Infinity/-Infinity
4、数值转换
Number()函数转换规则:
- boolean,转1或0;
- 数值,直接传入和返回;
- null,返回0;
- undefined,返回NaN;
- 字符串:
- 字符串数值,转成十进制数值,‘023’转成123,忽略前导0;
- 字符串数值包含有效浮点数,‘01.1’转成1.1,忽略前导0;
- 字符串包含有效的的十六进制,‘0xf’转换成同等大小的十进制数值;
- 字符串是空“”,则转换为0;
- 字符串包换除上诉情况外,则转换为NaN;
- 对象,则先调用valueOf(),返回对应的数值,如果返回NaN,则调用toSting(),转换返回的字符串值;
parseInt()函数,从左至右依次解析:
- 第一个字符不是数值或负号,则返回NaN;
- 空字符,则返回NaN;
- 忽略字符串前面的空格,直到找到第一个非空数值字符串;
- 前面解析为数值,后面则不是数值字符串则忽略,‘123b’,返回123,忽略“b”,‘12.3’;则返回12,忽略‘.3’;
对于二进制、八进制、十进制、十六机制的转换,则传递第二个参数(指定转换的基数)parseInt( 10,2 ),返回二进制数;
parseFloat()函数,从左至右依次解析(与parseInt()不同之处):
- 第一个小数点有效,“22.34.5”,返回22.34;
- 始终会忽略前导零;
- 十六进制格式的,返回0,parseFloat()只解析十进制值,没有第二个参数;
String类型
1、字符字面量
特殊字面量,也叫转义序列,用于表示非打印字符,字面量如下表:
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号('),在用单引号表示的字符串中使用 |
\" | 双引号("),在用双引号表示的字符串中使用 |
\xnn | 以十六进制代码nn表示的一个字符(其中n为0~F),列如:\x41表示"A" |
\xunnnn | 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。列如:\u03a3表示希腊字符 |
双字节与单字节
2、字符串的特点
特点:字符串一旦创建,其值不能被改变,要改变某个变量保存的字符串,首先要销毁原来的字符
var lang = "Java"; lang = lang + "script" //后台操作步骤: //1、创建能容纳10个字符的新字符串 //2、新字符串中填充"Java"和"script" //3、销毁原来的字符串"Java"和字符串"script"
3、转换为字符串
toString()
- 除了null和undefined,每个值(数值、布尔值、对象、字符串【返回字符串的一个副本】)都有 toString()方法;
- 输出数值的基数,传递一个参数(二进制、八进制、十进制、十六进制以及任意有效进制格式),默认情况下toString()以十进制格式返回数值字符串,
String()
可以将任何类型的值转换为字符串,包括null和undefined
转换规则:
- 值有 toString()方法则调用 toString();
- null,返回“null”;
- undefined,返回“undefined”;
Object类型
Object是一组数据和功能的集合,是所有它的实例的基础,每个实例有具有Object的属性和方法:
- constructor:保存着用于创建当前对象的函数,列如:构造函数(constructor)就是Object();
- hasOwnProperty( “propertyName” ):用于检查给定的属性在当前对象实例中(而不是实例原型中)是否存在;
- isPrototypeOf( object ):用于检查传入的对象是否是传入对象的原型;
- propertyIsEbumerable( “propertyName ” ):用来检查给定的属性是否能够使用for...in语句来枚举;
- toString():返回对象的字符串表示;
- valueOf():返回对象的字符串、数值、布尔值表示,通常与toString()的返回值相同;