1. JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
- JavaScript数据类型
- 数值 number:整数和小数
- 字符串 string:字符组成的文本
- 布尔值 boolean:true和false
- undefined:undefined 表示根本不存在定义
- null:null 表示一个值被定义了,定义为“空值”
- 对象 object:各种值组成的集合
- symbol
- 原始类型:number, string, boolean
- 复杂类型:object
区别:复杂类型是多个原始类型的值的集合,可以看作是一个存放各种原始类型值的容器
undefined与null的区别
2. typeof和instanceof的作用和区别?
- typeof 返回 这个变量的数据类型(number、string、boolean
、function、undefined,数组/对象返回object) - instanceof返回true\false
instanceof只能用来判断对象和函数,不能用来判断字符串和数字等
var b = '123';
alert(b instanceof String); //false
alert(typeof b); //string
var c = new String("123");
alert(c instanceof String); //true
alert(typeof c); //object
var b = [];
alert(b instanceof Array); //true
http://blog.csdn.net/u014421556/article/details/52083215
3. 如何判断一个变量是否是数字、字符串、布尔、函数
用typeof ,如
var a="666";
typeof a === string; //true
4. NaN是什么? 有什么特别之处?
表示非数字,属于number类型/
1/0
任何数跟它都不相等,包括它自己。
5. 如何把非数值转化为数值?
使用函数 Number(), parseInt(), parseFloat() 可以将非数值转换为数值。
var a="efd3215.25"
console.log(Number(a)); //NaN
console.log(parseInt(a)); //NaN
console.log(parseFloat(a)); //NaN
var b="846.5dfef"
console.log(Number(b)); //NaN
console.log(parseInt(b)); //846
console.log(parseFloat(b)); //846.5
6. ==与===有什么区别
===表示全等:操作数必须是同一类型,才进一步比较
==: 如果操作数类型不同,会在转换类型后进行比较
7. break与continue有什么区别
break:表示强制退出循环体,执行循环体后面的语句
continue:表示退出本次循环过程,即循环体中continue后面的语句停止执行,直接进入下次循环
8. void 0 和 undefined在使用场景上有什么区别
ES5之后的标准中,规定了全局变量下的undefined值为只读,不可改写的,但是局部变量中依然可以对之进行改写。(非严格模式下)
undefined =123;
console.log(undefined); //undefined
(function(){
var undefined = 123;
console.log(undefined); //123
})()
void的返回值都是undefined,
所以用void 0是为了防止undefined被重写而出现判断不准确的情况。
9. 以下代码的输出结果是?为什么?
console.log(1+1); // 2
console.log("2"+"4"); //24
console.log(2+"4"); // 24
console.log(+"4"); //4
- 在两个操作数都是数字的时候,会做加法运算
- 两个参数都是字符串或在有一个参数是字符串的情况下会把另外一个参数转换为字符串做字符串拼接
- 在参数有对象的情况下会调用其valueOf或toString
- 在只有一个字符串参数的时候会尝试将其转换为数字
- 在只有一个数字参数的时候返回其正数值
- 以下代码的输出结果是?
var a = 1;
a+++a; //(a++)+a ==> 1+2 ==> 3
typeof a+2; //(typeof a)+2 =>"number"+2 => number2
- 以下代码的输出结果是? 为什么
var a = 1;
var b = 3;
console.log( a+++b ); // (a++)+b => 4
// 先用a的值,a再自加1。 ++的优先级比+高
- 遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
for(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(i+":"+obj[i]);
}
- 以下代码输出结果是? 为什么 (选做题目)
|| 、&&返回的是表达式的值
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
// (typeof a) + b||c > 0 ==> "number"+ 2("number2"为true,||中短路,val="number2")
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
/* (d==5) 为true ==> console.log('bb')输出 bb ,返回值undefined
==>&&运算, data值为undefined ,输出undefined */
var data2 = d = 0 || console.log('haha')
console.log(data2)
/* ( 0 || console.log('haha')) ==> 0,往后 ==> 输出haha ,返回undefined
==> data2值为undefined */
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
/* (!"world", !!"from here!!")逗号运算符用于对两个表达式求值,并返回后一个表达式的值,
!!"from here!!" 为true ==> !!"Hello" 为true
==> var x = true + true转换为var x = 1 + 1 ==> x为2
当数字和布尔值或布尔值与布尔值进行+、-、*、/操作时,会将布尔值转换为数字,true转换为1,false转换为0。
*/