复杂(引用)数据类型
包括:Object、Array、Function、RegExp、Date、Map、Set、Symbol等
基本数据类型
包括:Number、String、Boolean、Undefined、Null
Number
包括:所有数字,不分大小、不分整浮、不分正负
小数中0可省
var a = .5;
较大数或较小数(绝对值较小)可以写成科学计数法
var a = 3e5;
console.log(a);//300000
var b = 3e-5
console.log(b);//0.00003
不同进制的数字
二进制以0b开头
0b10 //2
0b1111 //15
八进制以0开头
017 //15
十六进制以0x开头
0xf //15
特殊的值NaN
用于指示未定义或不可表示的值
typeof NaN; //number
NaN何时出现
1.NaN 参与运算
2.不定式
下列除法运算:0/0、∞/∞、∞/−∞、−∞/∞、−∞/−∞
下列乘法运算:0×∞、0×−∞
下列加法运算:∞ + (−∞)、(−∞) + ∞
下列减法运算:∞ - ∞、(−∞) - (−∞)
3.产生复数结果的实数运算。
例:
对负数进行开偶次方的运算
对负数进行对数运算
对正弦或余弦到达域以外的数进行反正弦或反余弦运算
NaN不自等,特别地在Set中相等
NaN == NaN //false
NaN === NaN //false
isNaN()判断变量值是否为NaN
isNaN(NaN)//true
isNaN(5)//false
机理:该变量传入Number()的执行结果是NaN,则结果就是true
Number(NaN) //NaN
Number('3天') //NaN
Number(undefined) //NaN
Number(null) //0
isNaN(NaN) //true
isNaN('3天') //true
isNaN(undefined) //true
isNaN(null) //false
String
字符串和变量拼接
可将变量插入到字符串中
var year = 2022;
var str = '北京冬季奥运会在' + year + '年召开';
注意:新版ES中增加了反引号表示法,可以更方便进行变量插值,后续课程将进行介绍
属性-length
字符串的长度
'我喜欢JS'.length //5
''.length //0
方法-提取子串
substring(start ,[end])
slice(start,[end])
substr(start ,[length])
若省略start,则从索引 0 开始提取
若省略 end/length, 则提取到数组/字符串末尾
区别:
1.参数位置是否可交换
substring()可自动交换两参数位置;而slice()不可且若一参>=二参则返回空字符串
'abcde'.substring(3, 1);//'bc'
'abcde'.slice(3, 2);//''
2.参数正负
slice()参数可以是负数;而substring()不可。
一参或二参为负数:表示在 原数组/字符串 中的倒数第几个元素开始提取或 结束提取。slice(-2)表示提取 原数组/字符串 中的倒数第二个元素到最后一个元素(包含最后一个元素)
'abcde'.slice(-4, -2);//'bc'
'abcde'.substring(-4, -2);//''
方法- indexOf() 检索位置
indexOf()返回某个指定的字符串值在字符串中首次出现的位置
如果要检索的字符串值没有出现,则该返回-1
'abcdeb'.indexOf('b')//1
'abcdeb'.indexOf('de')//3
'abcdeb'.indexOf('m')//-1
Boolean
值只有两个:true和false
Undefined
表示"缺少值",此处应该有值,但还未被定义
用于指示变量尚未赋值
undefined的类型也是undefined;即:undefined是值,又是一种类型,该类型只有它自己一个值
何时出现?
1.被var声明,但未被赋值的变量,其默认值是undefined
2.对象未被赋值的属性,其默认值是undefined
3.函数调用时,应提供的参数未提供,该参数默认值undefined
4.函数没有设置返回值,其默认值是undefined
var i;
console.log(i); // undefined
var o = new Object();
console.log(o.p); // undefined
function f(x) {
console.log(x); // undefined
}
f();
function fn() {
var hometown = "赣州市于都县";
//无返回值;
}
var b = fn();
console.log("fn()函数的返回值=" + b); //fn()函数的返回值=undefined
null
表示"没有对象",即此处不该有值
用于指示变量中未包含有效的数据
典型用法:
1.作为函数的参数,表示该函数的参数不是对象
若需传递参数且参数是对象,但暂时不想传递或不需要传递,可以传null ;
2.作为对象原型链的终点
Object.getPrototypeOf(Object.prototype) //null
3.内存回收-对象销毁、数组销毁
obj = {
'name': 'xyz',
'age': 18
}
// 内存回收
obj = null
console.log(obj)
4.删除事件监听
//删除事件监听
box.onclick=null;
特别的,使用typeOf时,null 会被误判为object
原理:不同对象在底层都表示为二进制
在 JavaScript 中,二进制前三位都为 0 时,会被判为 object
null 的二进制表示是全 0,自然前三位也是 0,故 typeOf null 结果为object
辨析复杂数据类型、基本数据类型
变量传值时
1)基本类型–内存中产生新副本,新变量指向不同地址的不同对象
var a = 3;//3在内存中
var b = a;// 3在内存中克隆一次放入新地址,变量b再指向这个新地址中的3
a++;
console.log(b);//3
console.log(a);//4
2)引用类型–内存中不产生新副本,新变量指向同一地址的同一对象
var arr1 = [1, 2, 3];// [1, 2, 3]在堆内存中
var arr2 = arr1;//不会克隆,arr2与arr1指向同一地址
arr1.push(4);
console.log(arr1);//[1, 2, 3,4]
console.log(arr2);//[1, 2, 3,4]
判等
1)基本类型–比较值是否相等
console.log(2 == 2);//true
2)引用类型–比较址是否相同,即是否是同一对象
console.log([] == []); //false
console.log([1, 2] == [1, 2]); //false
辨析undefined、null、NaN
所属数据类型
typeOf undefined// undefined
typeOf null// object
typeOf NaN// number
作用
undefined:用于指示变量尚未赋值(表示"缺少值",此处应该有值,但还未被定义)
null:用于指示变量中未包含有效的数据(表示"没有对象",即此处不该有值)
NaN:用于指示未定义或不可表示的值
产生原因(用于何处?)
undefined:
1.被var声明,但未被赋值的变量,其默认值是undefined
2.对象未被赋值的属性,其默认值是undefined
3.函数调用时,应提供的参数未提供,该参数默认值undefined
4.函数没有设置返回值,其默认值是undefined
null:
1.作为函数的参数,表示该函数的参数不是对象
若需传递参数且参数是对象,但暂时不想传递或不需要传递,可以传null ;
2.作为对象原型链的终点
3.内存回收-对象销毁、数组销毁
4.删除事件监听
NaN:
1.NaN 参与运算
2.不定式
下列除法运算:0/0、∞/∞、∞/−∞、−∞/∞、−∞/−∞
下列乘法运算:0×∞、0×−∞
下列加法运算:∞ + (−∞)、(−∞) + ∞
下列减法运算:∞ - ∞、(−∞) - (−∞)
3.产生复数结果的实数运算。
例:
对负数进行开偶次方的运算
对负数进行对数运算
对正弦或余弦到达域以外的数进行反正弦或反余弦运算
TypeOf检测结果汇总
数据类型 | 检测结果 | 值举例 |
---|---|---|
number | number | 2 |
NaN | number | NaN |
string | string | ‘慕课网’ |
boolean | boolean | true |
undefined | undefined | undefined |
function | function | function(){} |
null | object | null |
object | object | new Object() |
array | object | new Array() |
Typeof是操作符不是内置函数;
使用时,无需圆括号
console.log(typeof zhangmiao);//undefined
console.log(typeof 'zhangmiao');//string
console.log(typeof 123);//number
console.log(typeof '123');//string
数据类型转换
转换为数字
Number()属构造函数-无自动截取功能
1.字符串转化为数字,纯数字字符串能变为数字,不是纯数字的字符串将转为NaN
Number('123');//123
Number('123.4');//123.4
Number('123年');//NaN
Number('2e3');//2000
Number('');//0
Number(' ');//0,中间空格结果也是0
2.布尔值转化为数字
Number(true);//1
Number(false);//0
3.undefined和null转化为数字
Number(undefined);//NaN
Number(null);//0
parseInt()返回整数-有自动截取功能
解析一个字符串,并返回一个整数
1.若字符串不是以数字开头,则转为NaN
2.不进行四舍五入
parseInt('3.14'); //3
parseInt('3.14是圆周率'); //3
parseInt('圆周率是3.14'); //NaN
parseInt('3.99'); //3,
parseFloat()返回浮点数-有自动截取功能
解析一个字符串,并返回一个浮点数
1.若字符串不是以数字开头,则转为NaN
2.不进行四舍五入
parseFloat('3.14'); //3.14
parseFloat('3.14是圆周率'); //3.14
parseFloat('圆周率是3.14'); //NaN
parseFloat('3.99'); //3.99
转化为字符串toString()
会变为“长得相同”的字符串
科学计数法和非10进制数字会转为10进制的值
转化为布尔值Boolean()
转为false的情况有以下,其他转化为true
- 0和NaN
- 空字符串
- undefined和null
应用:计算器
//1.用户输入两个数字(prompt(text,defaultText)接收到的内容是文本形式,需转换为数字)
var a = Number(prompt('请输入第1个数字'));
var b = Number(prompt('请输入第2个数字'));
//2.计算两个数字的和
var sum = a + b;
//3.弹出结果
alert(a + '+' + b + '的结果是' + sum);
意义:程序虽小,但体现了计算机程序普遍执行步骤:用户输入、计算机处理、显示结果