JS数据类型及运算符
1.JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
六种,其中:number,string,boolean属于原始类型; object属于复杂类型; undefined和null属于特殊类型。原始类型和复杂类型的区别:原始类型是表示Javascript中可用的数据或信息的最底层形式或最简单形式,不能表示由其他值组成的值。不可以添加属性和方法。复杂类型可以由很多不同类型的javascript对象组成。复杂对象其在内存中的大小是未知的,因为复杂对象可以包含任何值,而不是一个特定的已知值。对于复杂类型,可以为其添加属性和方法,也可以改变和删除其属性和方法。
2.typeof和instanceof的作用和区别?
typeof:用来获取运算数的数据类型。
instanceof用于判断某个变量是否是某个对象的实例。
区别:typeof返回的结果可能为number、boolean、undefined、function、object、string,但这些结果本身都是字符串。对于Array,Null等特殊对象使用typeof 一律返回object;instanceof返回值为true或false,是布尔值,可以区分数组和对象。
3.如何判断一个变量是否是数字、字符串、布尔、函数?
使用typeof检测:typeof
4.NaN是什么? 有什么特别之处?
NaN即”not a number“的缩写,代表非数字值的特殊值,用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。需要注意的是,NaN 与其他数值进行比较的结果总是不相等的,包括它自身在内。因此,不能与 Number.NaN 比较来检测一个值是不是数字,而只能调用 isNaN() 来比较。
5.如何把非数值转化为数值?
有三个函数可以把非数值转换为数值:Number()或 parseInt()或parseFloat()
6.==与===有什么区别
== 相等=== 严格相等===是严格意义的相等,只需注意NaN和NaN不等就行了。而使用==的时候,javascript会帮我们做类型转换,例如:1.如果一个是null,一个是undefined,那么相等2.如果一个是数字,一个是字符串,先将字符串转为数字,然后比较3.如果一个值是true/false则将其转为1/0比较4.如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较5.其它就不相等了
7.break与continue有什么区别
break直接跳出循环,一次也不再执行;而continue只跳出本次循环,以后的循环仍会执行。
8.void 0 和 undefined在使用场景上的区别
void 会执行后面的表达式并返回 undefined,通常 void 0 会用来获取 undefined。undefined 可能会被重写,但是 void 0 返回的值一定会是 undefined。
9.以下代码的输出结果?
console.log(1+1);
console.log("2"+"4");
console.log(2+"4");
console.log(+"4");
第二句相当于(a++)+a;结果为3,第三句相当于(typeof a)+2;即字符串”number“和2拼接,得到”number2“
11.以下代码输出结果?
var a = 1;
var b = 3;
console.log( a+++b );
先算a++为1,再用这个值加上b,结果为4。但a的值此时变成了2
12.以下代码输出结果?
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
/*结果为number2,先运算typeof a,结果为number,接着与b拼接变为number2,||运算符前面的值为true的话,则直接返回前面的值。所以结果为number2。*/
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
/*结果为”bb“,&&运算符,若前面值为true,则返回后面的值”bb“*/
var data2 = d = 0 || console.log('haha')
console.log(data2)
/*结果为”haha",||运算符左边为0,所以直接返回其右边的"haha*/
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
/*结果为2,!运算符会将字符串转换为布尔值,逗号运算符返回其后面的表达式的值,即true,与前面的true相加时会转换成数字1+1,所以最终结果为2*/