JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
- 6种数据类型分别是
string
number
boolean
undefined
null
object
-
string
number
boolean
是原始类型,也是最基本的数据类型
-
object
是复杂类型,因为一个对象是由多个原始类型的值合成,也是一个可以存放各种值的容器
- 区别 原始类型变量存的是值,复杂类型的变量存的是内存地址 参考链接
typeof和instanceof的作用和区别?
typeof 'bolong';
"string"
typeof 1
"number"
typeof true
"boolean"
typeof undefined
"undefined"
typeof null
"object"
typeof []
"object"
typeof {}
"object"
typeof function fn(){}
"function"
-
instanceof
检测会返回一个布尔值,用于判断一个变量是否是某个对象的实例
var arr = [1, 2, 3];
arr instanceof Array
true
var obj = {};
obj instanceof Object
true
var str = 'bolong';
str instanceof String
false
如何判断一个变量是否是数字、字符串、布尔、函数
typeof 'bolong';
"string"
typeof 1
"number"
typeof true
"boolean"
typeof function fn(){}
"function"
NaN是什么? 有什么特别之处?
- NaN 全称Not a Number 非一个数字,NaN是
number
类型的值,NaN和任何值都不相等,包括它自己,计算结果无法转化为JS可显示的数字类型或是结果无法转换成数字类型时,返回NaN
NaN != NaN
true
如何把非数值转化为数值?
-
Number()
把给定的值转换成数字
-
parseInt()
把值转换成整数
-
parseFloat()
把值转换成浮点数
==与===有什么区别
'2017' == 2017
true
-
===
严格相等运算符(比较它们是否为“同一个值”,如果两个值不是同一类型,直接返回false
)
true === "true"
false
break与continue有什么区别
-
break
用于强制退出本次循环
-
continue
用于退出本次循环,执行下次循环
void 0 和 undefined在使用场景上有什么区别
-
void 0
运算后返回值是 undefined
,不可被重写
-
undefined
在局部作用域中,是可以被重写的,如果要判断一个变量是否和 undefined
相等,可以使用 void 0
来进行比较
function f(){
var undefined = 100;
var str;
if(str == undefined){
console.log('相等');
}else{
console.log('不相等');
}
}
f(); // 返回不相等,因为undefined 被赋值 100
function f(){
var undefined = 100;
var str;
if(str == void 0){
console.log('相等');
}
}
f(); // 返回相等
以下代码的输出结果是?为什么?
console.log(1+1); // 2 两个数值相加
console.log("2"+"4"); // '24' 2和4分别是字符串,按照字符串的加法进行来字符串拼接
console.log(2+"4"); // '24' 因为在有一个参数是字符串的情况下会把另一个参数转换为字符串做字符串拼接
console.log(+"4"); // 4 因为在只有1个字符串参数的时候会尝试将其转换为数字
以下代码的输出结果是?
var a = 1;
a+++a; // 输出3,因为 ++ 比 + 运算级别高,所以先 a++
typeof a+2; // 输出number2,因为 typeof 比 + 运算级别高,所以先 typeof a 等于 number
以下代码的输出结果是? 为什么
var a = 1;
var b = 3;
console.log( a+++b );
- 输出4,因为 ++ 比 + 运算级别高,所以先 a++ ,相当于
(a++)+b => 1+3 => 4
遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
for(var 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]);
}
以下代码输出结果是?
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) // 输出number2,操作符优先级得出 typeof a + b的结果是"number2", c > 0的结果是true,"number2"||ture将返回"number2"。
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data) // 输出 bb,&& 做对比,左边为真返回右边
var data2 = d = 0 || console.log('haha')
console.log(data2) // 输出 haha,左右两边有一个为真就返回真的那个
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x) // 输出 2 ,一个 ! 表示取返,返回 false == 0,两个!!表示两次取反,返回 true == 1,逗号运算符用于对两个表达式求值,并返回后一个表达式的值。