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操作符1
2
3
4alert(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.以下代码的输出结果是?为什么?
1 | console.log(1+1); //2 (数值相加) |
10. 以下代码的输出结果是?
1 | var a = 1; |
11. 以下代码的输出结果是? 为什么
1 | var a = 1; |
12. 遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
1
2
3
4var arr=[3,4,5];
for(var i = 0; i<arr.length;i++){
console.log(arr[i]*arr[i]);
}
13. 遍历 JSON, 打印里面的值
1 | var obj = { |
1 | var obj = { |
14. 以下代码输出结果是? 为什么 (选做题目)
1 | var a = 1, b = 2, c = 3; //number2 |
1 | var d = 5; // bb |
1 | var data2 = d = 0 || console.log('haha') //haha |
1 | var x = !!"Hello" + (!"world", !!"from here!!"); //2 |