1.JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
JavaScript语言的每一个值,都属于某一种数据类型。JavaScript的数据类型,共有六种。
- 数值(number):整数和小数(比如1和3.14)
- 字符串(string):字符组成的文本(比如"Hello World")
- 布尔值(boolean):true(真)和false(假)两个特定值
- undefined:表示“未定义”或不存在,即此处目前没有任何值
- null:表示空缺,即此处应该有一个值,但目前为空
- 对象(object):各种值组成的集合
- symbol:一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。
数值、字符串、布尔值称为原始类型(primitive type)的值,即它们是最基本的数据类型,不能再细分了。
将对象称为复杂类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。
2.typeof和instanceof的作用和区别?
typeof
作用: 是一个一元运算,放在一个变量之前,变量可以是任意类型。
它返回值是一个字符串,该字符串说明变量的类型。typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined。
我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错。
区别: 对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。
instanceof
作用返回的是一个布尔值,判断该变量是否某一类型。如:
var a = {};
alert(a instanceof Object); //true
var b = [];
alert(b instanceof Array); //true
区别:需要注意的是,instanceof只能用来判断对象和函数,不能用来判断字符串和数字等.但是,用instanceof可以判断变量是否为数组
3.如何判断一个变量是否是数字、字符串、布尔、函数
用typeof操作符
alert(typeof(1));//number
alert(typeof("abc"));//string
alert(typeof(true));//boolean
alert(typeof function(){}); // 'function'
4.NaN是什么? 有什么特别之处?
NaN含义是Not a Number,表示非数字,NaN和任何值都不相等,包括自己
特别: 任何NaN的值进行操作都会返回一个NaN,其次,NaN与任何值都不相等即NaN === NaN也是false.
5.如何把非数值转化为数值?
parseInt() 函数可解析一个字符串,并返回一个整数。
parseInt("10"); //返回 10
1. Number()函数
- 如果是 Boolean 值,true 和 false 将分别被转换为 1 和0;
- 如果是数字值,只是简单的传入和返回;
- 如来是null 值,返回 0;
- 如果是 undefined,返回NaN ;
- 如果是字符串,遵循下列规则:
- 如果字符串中只包含数字,则将其转换为十进制数值,即"1"会变成1 , "123"会变成123,而"011"会变成11(注意,前导的0被忽略了);
- 如果字符串中包含有效的浮点格式, 如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导零);
- 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;
如果字符串是空的(不包含任何字符) ,则将其转换为0;
如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。 - 如果是对象,则调用对象的 valueOf() 方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString() 方法,然后再次依照前面的规则转换返回的字符串值。
2. parseInt()
由于Number()函数在转换字符串的时候比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()。
parselnt() 函数在转换字符串时,更多的是看其是否符合数值模式,它会忽略字符串前面的空格,直至找到第一个非空格字符;
如果第一个字符不是数字字符或者负号,parseInt() 就会返回 NaN;也就是说,用parselnt() 转换空字符时会返回 NaN(Nurnber() 对空字符返回 0);
如果第一个字符是数字字符,parselnt() 会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。
例如,"1234blue"会被转换为1234 ,因为"blue"会被完全忽略;类似地,"'22.5"会被转换为22 ,因为小数点并不是有效的数字字符。
3. parseFloat()
与 parseInt () 函数类似,parseFloat () 也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。举例来说,"22.34.5"将会被转换为22.34 。
6.==与===有什么区别
== 相等
=== 严格相等
详细参考
7.break与continue有什么区别
break 用于强制退出循环体,执行循环后面的语句
continue 用于退出本次循环,执行下次循环
8.void 0 和 undefined在使用场景上有什么区别
undefined在某些场景例如函数内是可以被赋值,而void 0 则只会返回undefined。
9.以下代码的输出结果是?为什么?
console.log(1+1); //2 (数值相加)
console.log("2"+"4"); //24 (2,4均为字符串,+连接字符串)
console.log(2+"4"); //24 (4为字符串,2为数值,此代码会转换2为字符串然后连接)
console.log(+"4"); //4 (+号强制转换为数值)
10. 以下代码的输出结果是?
var a = 1;
a+++a;
typeof a+2; //number2
/* (a++)+a=1+2;
(typeof a)+2=number2 */
11. 以下代码的输出结果是? 为什么
var a = 1;
var b = 3;
console.log( a+++b ); //4
/ (a++)+b=1+3=4
12. 遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
var arr=[3,4,5];
for(var i = 0; i
13. 遍历 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(key in obj){
console.log(key+":"+obj[key]);
}
14. 以下代码输出结果是? 为什么 (选做题目)
var a = 1, b = 2, c = 3; //number2
var val = typeof a + b || c >0
console.log(val)
/* val = (typeof a) + [ b || ( c > 0 ) ]
typeof a ==> number; c > 0 ==> true; 2 || true ==> true
*/
var d = 5; // bb
var data = d ==5 && console.log('bb')
console.log(data)
/* data = ( d == 5 ) && console.log("bb")
d == 5 ==> true ;
*/
var data2 = d = 0 || console.log('haha') //haha
console.log(data2)
/* data2 = [ d =( 0 || console.log('haha') ) ]
0 ==>false ; d=console.log("haha") ;data2 = d = haha
var x = !!"Hello" + (!"world", !!"from here!!"); //2
console.log(x)
/* x = (!!"Hello") + (!"world", !!"from here!!");
(!!"Hello") ==>true ; (!"world", !!"from here!!") ==> true ; x= true +true = 2
参考答案