文章目录
前言
JavaScript中有6种数据类型,分别为string,number,boolean,null,undefined,和object类型,前5种为基本数据类型,在栈内存中存储,object为引用数据类型,在堆内存中存储
一、JavaScript中的六大数据类型
1.字符串类型(String)
在js中字符串使用引号(单引号/双引号)引起来,引号不能混用
双引号不能嵌套双引号,单引号不能嵌套单引号,双引号可以嵌套单引号,单引号可以嵌套双引号
var str1="hello";
var str2='hello';
console.log(str1);//hello
console.log(str2);//hello
var str3="he'll'o";
console.log(str3);//he'll'o
var str4='he"ll"o';
console.log(str4);//he'll'o
转义字符 \
字面量 | 含义 |
---|---|
\" | " |
\’ | ’ |
\n | 换行 |
\t | 制表符(一个Tab) |
\\ | \ |
console.log("\\");// \
console.log("\"");// "
var str="javascript";
console.log(typeof str);//string
console.log(str.length);//10
2.数值类型(Number)
在js中所有的数值都是number类型,包括整数和浮点数(小数)
js中可以表示的数字的最值
console.log(Number.MAX_VALUE);//1.7976931348623157e+308
console.log(Number.MIN_VALUE);//5e-324,注:该值为大于0的一个数
如果使用number表示的数字超过了最值,则会返回Infinity、-Infinity
-infinity | 正常显示 | -0 | 0 | 正常显示 | infinity |
---|---|---|---|---|---|
num<=-1.7976931348623157e+308 | -1.7976931348623157e+308<num<-5e-324 | -5e-324<num<0 | 0<=num<=5e-423 | 5e-423<num<1.7976931348623157e+308 | num>=1.7976931348623157e+308 |
console.log(1.7976931348623157e+608);//infinity
console.log(-1.7976931348623157e+608);//-infinity
console.log(-5e-330);//-0
console.log(5e-400);//0
//isFinity()检查一个数是否在范围内
console.log(isFinite(1.7976931348623157e+608));//false
console.log(isFinite(-5e-330));//true
console.log(typeof Infinity);//number
NaN是一个特殊的数字,表示Not a Number
//使用typeof检查NaN的类型
console.log(typeof NaN);//number
在js中整数的运算基本可以保证精确,但如果使用js进行浮点运算,可能得到一个不精确的结果(故尽量不要使用js进行对精确度要求比较高的运算)
eg:
var c=0.1+0.2;
console.log(c);//0.30000000000000004
3.布尔类型(Boolean)
布尔值只有两个,主要用于做逻辑判断
当布尔值为真时,返回true
当布尔值为假时,返回false
//用typeof检查一个布尔值时,会返回boolean
console.log(typeof true);//boolean
4.Null类型
Null类型的值只有一个,就是null,null专门用来表示一个为空的对象
//使用typeof检查一个null时,会返回object
console.log(typeof null);//object
5.Undefined类型
undefined类型的值只有一个,就是undefined
当声明一个变量,但是并不给变量赋值时,它的值就是undefined
//使用typeof检查一个undefined时,返回undefined
console.log(typeof undefined);//undefined
6.对象类型(Object)
对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。如果使用基本数据类型的数据,我们所创建的变量都是独立的,不能成为一个整体
对象的分类
1.内建对象
——由ES标准中定义的对象,在任何的ES的实现中都可以使用
——eg:Math,String,Number,Boolean,Function,Object
2.宿主对象
——由js的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
——eg:BOM,DOM
3.自定义对象
——由开发人员自己创建的对象
创建对象
使用new关键字调用构造函数,构造函数是专门用来创建对象的函数
eg:
var obj=new Object();
console.log(typeof obj);//object
在对象中保存的值称为属性
——向对象中添加属性
语法:对象.属性名=属性值;
——读取对象中的属性
语法:对象.属性名;
——修改对象的属性值
语法:对象.属性名=新值;
——删除对象的属性
语法:delete 对象.属性名;
var obj=new Object();
console.log(typeof obj);//object
obj.name="孙悟空";
console.log(obj.name);//孙悟空
obj.name="猪八戒";
console.log(obj.name);//猪八戒
obj.age=19;
console.log(obj.age);//19
delete obj.age;
console.log(obj.age);//undefined
对象的属性名和属性值
属性名
对象的属性名不强制要求遵守标识符的规范,什么名字都可以使用,但还是应尽量按照标识符的规范去做。如果要使用特殊的属性名,不能采用 . 的方式来操作,需要使用另一种方式:
语法:对象["属性名"]=属性值;
var obj2=new Object();
obj2["123"]=789;
console.log(obj2["123"]);//789
使用[]这种形式去操作属性,更加的灵活,在[]中可以直接传递一个变量,这样变量值是多少就会读取那个属性
var obj3=new Object();
obj3["123"]=456;
obj3["1"]="hello";
obj3["#$$%%#"]=666;
var n="123";
console.log(obj3[n]);//456
n="1";
console.log(obj3[n]);//hello
n="#$$%%#";
console.log(obj3[n]);//666
属性值
js对象的属性值,可以是任意的数据类型(包括对象)
in运算符
可以使用该运算符来检查一个对象中是否含有指定的属性
如有则返回true,否则返回false
语法:"属性名" in 对象
var obj = new Object();
obj.name = "孙悟空";
console.log("name" in obj); //true
console.log("age" in obj); //false
对象字面量
使用对象字面量,可以在创建对象时,直接指定对象中的属性
语法:{属性名:属性值,属性名:属性值·····}
对象字面量的属性名可以加引号,也可以不加,建议不加
如果要使用一些特殊的名字,则必须加引号
var obj={
name:"猪八戒",
age:28,
gender:"男",
test:{name:"沙和尚"}//属性值为对象,属性名为test
};
console.log(obj.test);//object{name="沙和尚"}
枚举对象中的属性
使用for···in语句可以枚举对象中的属性
语法:
for(var 变量 in 对象){
语句···
}
for···in语句对象中有几个属性,循环体就执行几次,每次执行时会将对象中的一个属性的名字赋值给变量
var obj={
name:"猪八戒",
age:28,
gender:"男",
test:{name:"沙和尚"}
};
// 枚举对象中的属性
for(var n in obj){
console.log(n);//name,age,gender,test
}
//下面这个循环便体现了使用[]这种形式去操作属性的灵活性
for(var n in obj){
console.log("属性名:"+n);
console.log("属性值:"+obj[n]);
}