- JavaScript 的数据类型
6种
number数值
string 字符串" "
boolean 布尔 true/false
underfined 未定义或不存在
null 有个值,为空
Object对象 多种值的集合(对象有:函数 数组 正则 对象)
Symbol (ECMAScript 6 新定义)
1.1 原始类型?复杂类型?
- 原始类型: number string bollean
基本数据类型,不能再细化了
- 复杂类型 : Object 对象
可以有多个原始类型组成,存放多种值的容器
- 其他 underfined 和 null 可以看成两个特殊的值
1.2 原始类型和复杂类型的区别?
- 基本类型变量存的是值,复杂类型的变量存的是内存地址。
- 基本类型在赋值的时候拷贝值,复杂类型在赋值的时候只拷贝地址,不拷贝值。
假设有如下 JS 代码:
基本类型var a = 1.23
var b = 3.14
obj对象 复杂类型怎么存储?看图
复杂类型
- 检查数据类型方法
typeof可以判断 object number string underfined boolean,
array object function null 判断不清晰,都为对象类型
所以typeof 一般多用于判断基本类型
instanceof 可以判断具体属于哪一个数据类型,返回true false。
Object.prototype.toString 最好的一种方式,可以判断一个变量的
具体类型
- 如何判断一个变量是否是数字、字符串、布尔、函数
用typeof 判断数据类型 是否是 数字 字符串 布尔 对象
然后用instanseof 判断是否为函数
-
NaN是什么? 有什么特别之处?
not a number ,非数字,是number类型,但不表示任何一个有效数字
特别之处: NaN和任意值都不相等,包括自己。NaN == NaN // false ,不相等 NaN !== NaN ; //true
-
如何把非数值转化为数值?
三个函数: Number() parseInt() parseFloat() -
==与===有什么区别
==是近似相等,判断值是否相等
=== 是绝对完全相等,判断值和数据类型是否相等 -
break与continue有什么区别
break continue 经常在循环语句中出现,循环终止,跳出循环
break 是循环终止,跳出循环,不再执行后面的循环
continue 是跳出循环,继续执行下一个循环 -
void 0 和 undefined在使用场景上有什么区别
undefined是一个全局属性,表示未定义或定义了没有赋值。
void是一个一元运算符,不管传入什么参数都会返回undefined
void 是为了兼容老的浏览器,IE7-11及主流浏览器
underfined 不能兼容IE7 8,见下面代码
void操作符是在ECMAScript v1中定义的,而undefined是在ECMAScript v5中定义的。
我们知道undefined不是javascript的保留字,所以我们可以用undefined作为变量名。这时,我们定义的undefined就会影响到使用undefined作为判断的地方。看下面例子:
测试了主流浏览器IE7-IE11、opera、firefox、safati、chrome
undefined=123;
alert(undefined);
//IE7、IE8是123,其余:IE9-IE11、opera、firefox、safati、chrome都是undefined
alert(void 0);
//IE7-IE11、opera、firefox、safati、chrome都是undefined
- 以下代码的输出结果是?为什么?
console.log(1+1); //2
-
操作数都是数字的时候做加法运算
console.log("2"+"4"); //24
-
string+string 字符串拼接
console.log(2+"4"); //24 2转换为字符串,字符串再拼接
-
两个参数都是字符串或者一个参数是字符串的情况下,会把另一个参数转换为字符串
console.log(+"4"); //4 4转成数字
-
只有一个字符串参数时,尝试将其转换为数字
运算符的优先级顺序
Paste_Image.png-
以下代码的输出结果是?
var a = 1;
a+++a;
typeof a+2;
输出 "number2"
计算过程:
1 .看优先级 ,++ 优先级高于+,根据优先级先计算a++,再+ -
a++ =2,但是a还是1,(a++)+a=3
-
typeof的优先级比+ 高,先执行 typeof a ,也就是typeof 3
返回"number", "number"+2 返回 "number2 -
以下代码的输出结果是? 为什么
var a = 1;
var b = 3;
console.log( a+++b ); //输出5
因为++ 的优先级比+高,先计算a++,然后在计算+b,a++有返回2,
2+3=5 -
遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
for(var i=0;i<arr.length; i++){
console.log(arr[i]* arr[i])
}
输出结果:
9
16
25 -
遍历 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(var key in obj){
console.log(obj[key])
}
输出结果:
hunger
male
28 -
以下代码输出结果是? 为什么 (选做题目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
输出: number2
考察到的点:优先级顺序: typeof > || + =
|| 逻辑运算符 有短路的功能 或运算时,一个为真就是真,则b是真,不需要再看第二个操作数 ,所以 b=2, 输出"2"
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
输出结果:console.log('bb') 输出是“bb”, 但是返回的是undefined
true&& underfined ,根据与运算 ,返回第二个值underfined
1.&&运算规则
1.1 两边条件都为true时,结果才为true;
1.2 如果有一个为false,结果就为false;
1.3 当第一个条件为false时,就不再判断后面的条件
注意:当数值参与逻辑与运算时,结果为true,那么会返回的会是第二个为真的值;
如果结果为false,返回的会是第一个为假的值。注意: data 和data2中的输出结果都为underfined
var data2 = d = 0 || console.log('haha')
console.log(data2)
输出结果: haha underfined
console.log('haha'),输出是“haha”, 返回undefined
d=0 也是 underfined ,underfined或underfined, 输出第一个undefined
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
输出结果 : 2
true+ (false + true )
1+ (0+1)=2
网友评论