JavaScript的数据类型
- Number类型
- String类型
- Boolean类型
- Object类型
- Array数组
- Function函数
- Regexp正则表达式
- Null类型
- Undefined类型
- 原始类型(Number、String、Boolean)
最基础的数据类型,不可再分割 - 复杂类型(Object)
一个对象里会存在多种基本数据类型,是一个容器 - 特殊值 (Undefined、Null)
typeof与instanceof的作用及区别
- typeof
作为检测变量数据类型的一种操作符,可以返回一个值的数据类型,如:number、string、boolean、function等。我们可以利用其这一特性来检测一个变量有没有被声明,但是不足的是对于复杂类型的数据类型只会返回object,所以为了区分复杂类型中的数据类型,我们可以使用instanceof - instanceof
由于上述的原因,我们可以通过instanceof检测某个对象是否是一种对象的实例。
如何判断一个变量是否是数字、字符串、布尔、函数
自然是使用typeof啦,如:
var message = "hello world";
alert (typeof message); //"string"
NaN
NaN(Not a Number)是一个特殊的数值,这个数值用来表示一个本要返回数值的操作数未返回数值的情况。它有两个非同寻常的特点,
- 任何涉及NaN的操作都会返回NaN;
- NaN与任何值都不相等,包括它自身;
数值的转换
这三个函数可以实现非数值转换数值(Number() 、parseInt() 、parseFloat())
- Number() 适用于所有数据类型
- parseInt()和parseFloat()适用于把字符串转换成数值
全等和不全等
二者的区别除了在比较之前不装换操作数之外,没有其他区别,全等===在两个操作数未转换就相等的情况下返回true,不全等==在两个操作数装换后相等则返回true。由于相等和不相等操作符存在类型转换的问题,为了保持代码中数据类型的完整性,我们建议使用全等和不全等。
break和continue的区别
- break 用于强制退出循环体,执行循环后的语句
- continue 则是退出当次循环,执行下次循环
void 0 和 undefined在使用场景上有什么区别
undefined 可以在局部作用域中被覆写void 运算返回值始终都是 undefine
练习
-
以下代码的输出结果及原因
2 //简单的数字相加
"24" //字符串拼接
"24" //数字转换为字符串后拼接
4 //字符串变为数字
- 以下代码输出结果
var a = 1;
a+++a; //a++=1,a+++a=3;
typeof a+2; //由于优先级的原因typeof a="number",所以结果是"number2"
- 以下代码的输出结果及原因
var a = 1;
var b = 3;
console.log( a+++b ); //4,a++优先级高的原因
- 遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
for(i=0; i<arr.length; i++){
console.log(arr[i]*arr[i]);
}
- 遍历 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(i in obj){
console.log(obj[a]);
}
- 以下代码输出结果是? 为什么
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) //"number2",根据优先级得到"number2"||c>0,所以为“number2”
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data) // bb, undefined true&&bb,所以为console.log(console.log('bb')),所以是undefined.
var data2 = d = 0 || console.log('haha')
console.log(data2) // haha,undefined,0||console.log('haha')得到haha,然后再赋值给d,再赋值给data2,于是console.log(data2)就是console.log(console.log('haha')),为undefined
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x) //2, 原式相当于 var x = true + true;