1.JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
数值,布尔值,字符串,null,undefined,对象
数值(number):整数和小数(比如1和3.14)
字符串(string):字符组成的文本(比如"Hello World")
布尔值(boolean):true(真)和false(假)两个特定值
undefined:表示“未定义”或不存在,即此处目前没有任何值
null:表示空缺,即此处应该有一个值,但目前为空
对象(object):各种值组成的集合
原始类型:数值,布尔值,字符串
复杂类型:对象(狭义的对象,数组,函数,正则表达式)
区别:复杂类型由几个原始类型构成,原始类型不能再进行细分
2.typeof和instanceof的作用和区别?
typeof返回一个值的数据类型,一般返回结果由number,string,true,false,object,undefine,function
我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错, 对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。
instanceof返回布尔值(true,false),判断一个值是否属于该数据类型
区别:instanceof用于判断一个变量是否某个对象的实例,而typeof判断运算数的类型
3.如何判断一个变量是否是数字、字符串、布尔、函数
function fn(a){
if(typeof a=='number'){alert('number')}
else if(typeof a=='boolean'){alert('boolean')}
else if(typeof a=='string'){alert('string')}
else if(typeof a=='function'){alert('function')}
}
fn(123);
fn(true);
fn("abc");
fn(fn);
4.NaN是什么? 有什么特别之处?
NaN含义是Not a Number,表示非数字,NaN和任何值都不相等,包括自己
特别:任何NaN的值进行操作都会返回一个NaN,其次,NaN与任何值都不相等即NaN === NaN也是false.
5.如何把非数值转化为数值?
parseInt()
parlFoatse()
Number()
parseInt parseFloat
忽略字符串前面的空白字符,找到第一个非空白字符
如果第一个字符不是-或者数字返回NaN
如果是继续解析,直到非数值模式为止
0开头会当做八进制,0x开头会当做十六进制,但是可以指定第二个参数指定基数
6.==与===有什么区别
== 相等
=== 严格相等
”==”与”===”是不同的,一个是判断值是否相等(js会在一些情况下进行隐式的类型转换再进行比较),一个是判断值及类型是否完全相等
7.break与continue有什么区别
break:强制退出当前循环体,执行循环后面的语句(多个循环嵌套,仅跳出当前循环体)
continue:退出本次循环,执行下次循环
8.void 0 和 undefined在使用场景上有什么区别
undefined在某些场景例如函数内是可以被赋值,而void操作符则永远会返回undefined
9.以下代码的输出结果是?为什么?
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;
//number2 typeof a是number,“+”后数字转换为字符串后拼接
- 以下代码的输出结果是? 为什么
var a = 1;
var b = 3;
console.log( a+++b );
//4 (a++)+b
- 遍历数组,打印数组每一项的平方
var arr = [3,4,5]
for(i=0;i<arr.length;i++){
console.log(arr[i]*arr[i]);
}
for(i in arr){
console.log(arr[i]*arr[i])
}
- 遍历 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(var i in obj){
console.log(i+":"+obj[i]);
}
- 以下代码输出结果是? 为什么 (选做题目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
//number2
//优先级 typeof ,+,>,|| ,number2||true,返回左边值
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
//bb
//undefined
//(d ==5 )&& console.log('bb')逻辑与(&&)如果第二个操作数是对象,则只有在第一个操作数求值结果为true的情况下返回该对象
var data2 = d = 0 || console.log('haha')
console.log(data2)
//haha
//undefined
//如果第一个操作数的求值结果为false,则返回第二个操作数
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
//2
//!!"Hello" 为true, !"world"为false, !!"from here!!"为true,(!"world", !!"from here!!")返回!!"from here!!"(true),true+true类型相加为2