JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
JS定义了6种数据类型:
- 数值类型
- 字符串类型
- 布尔值
- undefined
- null
- Object
原始类型:数值,字符串,布尔值。它们是最基本的数据类型不可在细分了。
复杂类型:对象。对象是由多个原始类型的值组成的集合,可以看做是存放各种值的容器。(ps对象细分的话又可以分为: 对象,函数,正则表达式和数组)
null和undefined是特殊类型的值!!
简单细说下null与undefined:
null 与 undefined的含义与用法都差不多,都是表示"没有"。但是它们二者是有区别的!
null 表示一个值被定义了,定义为"空值"。
undefined 表示根本不存在定义!!
借用网上大神的一段证明:设置一个值为null是合理的,比如objA.value1 = null;但是如果设置objA.value1 = undefined就不合理了。
原始类型与复杂类型的区别:
- 基本类型变量存的是值,复杂类型的变量存的是内存地址
- 基本类型在赋值的时候拷贝值,复杂类型在赋值的时候只拷贝地址,不拷贝值。
typeof和instanceof的作用和区别?
typeof 是一元运算符,用来获取运算数的数据类型。返回的值有undefined,boolean,number,string,null,object.而对象,数组和null遇到typeof会返回object。当要判断某个对象是否是数组或者某个变量是否是对象的实例时就要使用instanceof, instanceof用来判断某个变量的值是否是某个对象的实例,返回值有true和false.
如何判断一个变量是否是数字、字符串、布尔、函数
console.log(typeof x === "number")
console.log(typeof x === "string")
console.log(typeof x === "boolean")
console.log(typeof x === "function")
NaN是什么? 有什么特别之处?
NaN是Not a Number,表示非数字,与任何值都不相等,包括它自身。
如何把非数值转化为数值?
- Number()
- parseInt()
- parseFloat()
==与===有什么区别
==是值相等,js会在一些情况下进行隐式的类型转换再进行比较。
===是严格相等(包括值和类型)
break与continue有什么区别
break - 跳出整个循环;如果是多层f循环,跳出当前for循环,而不是整个循环。
continue - 跳出本次循环,执行下个循环。
void 0 和 undefined在使用场景上有什么区别?
undefined 不能被重写。但是在局部作用域中,还是可以被重写的。
所以undefined现常用于全局环境
void 运算符通常只用于获取 undefined 的原始值,一般使用 void(0)(等同于 void 0)。在上述情况中,也可以使用全局变量undefined 来代替(假定其仍是默认值)。
而 void 可以给任何给定的表达式求值,并返回 undefined,并且 void 不可被重写,因此void 0是在局部作用域中替代undefined的最佳选择
以下代码的输出结果是?为什么?
console.log(1+1); // 2 因为都是数字所以会做加法运算
console.log("2"+"4"); // 24 因为都是字符串所以会做字符串拼接
console.log(2+"4"); // 24 在有一个参数是字符串的情况下会把另外一个参数转换为字符串做字符串拼接
console.log(+"4"); // 4 在只有一个字符串参数的时候会尝试将其转换为数字
以下代码输出的结果是?
var a = 1;
a+++a;
typeof a+2;
因为++的权重大于+,所以a+++是(a++)+a,而a++=1之后a=2, 1+2=3,所以a+++a=3, typeof的权重又比+ 高,所以(typeof a)+2,故最后得出"number2"。
以下代码输出的结果是?为什么?
var a = 1;
var b = 3;
console.log( a+++b );
最后得出4,因为++的权重比+高,故得(a++)+b, a++=1, 1+3=4。
遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]*arr[i]);
}
遍历JSON,打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(var i in obj){
console.log(obj[i]);
}