JavaScript数据类型
1. typeof 运算符
- 在js代码运行过程中动态获取变量的数据类型
- 格式:
typeof 变量名
- 运算结果:undefined 、 number 、 string 、 boolean 、 object 、 function
- js中判断字符串是否相等使用 == 运算符
2. Undefined
只有一个值:undefined;当一个变量声明后却没有赋值,系统默认赋值undefined
3. Number
- 包括:1,0,-1,3.14,NaN【Not a Number】,Infinity【无穷大】等
- NaN:当一个数学表达式本应返回一个数字,但最终无法返回一个数字时,结果为NaN。如:
var number = 1 / "zhangsan";
- Infinity:当除数为0时,计算结果是无穷大。如:
var number = 1 / 0;
- isNaN()函数:返回true表示不是一个数字,返回false表示是一个数字。会尝试将变量参数转换成数字,转换成功返回false,转换失败返回true,如
isNaN(true) 返回false
- Number()函数:将不是数字类型的数据转换成数字类型的数据,如
Number("123")
;如果转换不了数字,则返回NaN - parseInt()函数:将数字字符串转换成数字,并只取整数部分,如:
var num = "123.12"; console.log(parseInt(num));
, 对于字符串"123.12中国"
仍旧可以提取出整数部分123,但对于字符串中国123.12
则返回NaN - ceil()函数:js内置的数学类Math中的一个函数,可以实现向上取整,如
console.log(Math.ceil(123.456));
,结果返回124 - 10 / 3:结果是3.3333333333333335
4. String
- 定义字符串1:
var str = "xxx";
其数据类型是String - 定义字符串2:
var str = new String("xxx");
其数据类型是Object - 常用属性length:返回字符串的长度。如
console.log("abc".length);
- charAt()方法:获取指定下标位置的字符,如
console.log("http".charAt(3));
返回结果是 p - concat()方法:连接字符串,如
console.log("abc".concat("def"));
返回结果是 abcdef - indexOf()方法:获取某个字符串在当前字符串中第一次出现处的索引,
console.log("hello".indexOf(l));
,返回结果是 2 - lastIndexOf()方法:获取某个字符串在当前字符串中最后一次出现处的索引,
console.log("hello".lastIndexOf(l));
,返回结果是 3 - replace()方法:替换,如
console.log("hello-java-script".replace("-",","));
,返回结果是 hello,java-script。这里只能替换第一个字符,要替换所有需要使用正则表达式 - split()方法:拆分字符串,返回一个数组。如
var arr = "hello-java-script".split("-");
,并遍历数组:for (var i = 0 ; i < arr.length ; ++i) { console.log(arr[i]); }
, - substr(startIndex ,length)方法:截取字符串,只有一个参数时和下面函数功能一致
- substring(startIndex,endIndex)方法:截取字符串,注意不包括endIndex
- toLowerCase()方法:转小写
- toUpperCase()方法:转大写
5. Boolean
- 只有两个值:true和false
- Boolean()函数:将不是布尔类型的数据转换成布尔类型。转换规则:空字符串为false,NaN为false,null为false,undefined为false;对象object为true,无穷Infinity为true【只要有东西,结果即为true】
6. Null
只有一个值:null; 注意typeof null 运算结果是 object
7. Object[引用数据类型 / 对象类型]
- object类:所有类型的超类 / 基类,是js中默认定义的类型,没有特殊说明时默认继承object
- prototype属性【翻译为原型】:可以动态给对象扩展属性和方法
<script>
var obj = new Object(); /*创建对象*/
Object.prototype.fun = function () { /*给Object类型的对象动态增加方法*/
console.log("调用fun函数");
};
Object.prototype.username = "zhangsan"; /*给Object类型的对象动态增加属性*/
obj.fun(); /*结果:调用fun函数*/
console.log(obj.username); /*结果:zhangsan*/
</script>
- 创建类的格式1:
function 类名 (形式参数列表) { this.属性名 = 参数; this.方法名 = function(){ ... } }
- 创建类的格式2:
类名 = function (形式参数列表) { this.属性名 = 参数; this.方法名 = function(){ ... } }
- 创建类的格式和创建函数的格式其实是一样的,区别是函数还是类关键看调用方式,函数的调用
fun();
, 而类的调用var obj = new fun();
,使用new会导致浏览器的堆中开辟一个新对象
<script>
/*定义一个学生类*/
Student = function (name , age , id) {
this.name = name;
this.age = age;
this.id = id;
this.study = function () {
console.log(this.name + "正在学习");
}
};
/*创建学生对象*/
var stu = new Student("zhangsan" , 11 , 123);
/*调用学生stu的方法*/
stu.study();
/*访问对象的属性方式1*/
console.log(stu.id)
/*访问对象的属性方式2*/
console.log(stu["id"])
</script>
8. ES6之后引入了其它新的数据类型【Symbol和BigInt】
9. == 和 === 运算符
- == 称为 等同运算符,只比较值是否相等
- === 称为全等运算符,既比较值是否相等,也比较数据类型是否相等
10. null、NaN和undefined的区别
- null是原始类型(基本数据类型),typeof运算的类型是object
- NaN的数据类型是Number
- undefined的数据类型是Undefined
- NaN == null 和 NaN == undefined 的结果都是false,但 null == undefined 的结果是true,即null和undefined是等同关系