数据类型运算符流程控制语句(进阶2)
2017-01-25 本文已影响0人
饥人谷_js_chen
1. JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
- JavaScript定义了6种数据类型:数值(number)、字符串(string)、布尔(boolean)、undefined、null、对象(object)、Symbol(ES6引入)
- 原始类型:number, string, boolean,Symbol(ES6引入)
- 复杂类型:对象(对象又包括侠义对象、数组、正则表达式、函数)
- 区别:一个对象可以包含多个原始类型值(或对象值)的合成;而原始类型是最基本的数据类型,不能再细分
2. typeof和instanceof的作用和区别?
- typeof:
- 可以判断数据类型,它返回表示数据类型的字符串(返回结果只能包括number,boolean,string,function,object,undefined);
- 可以使用typeof判断变量是否存在(如if(typeof a!="undefined"){...});
- 对于Array、Null、正则表达式等特殊对象,会返回object
- instanceof:
- 用于判断一个变量是否是某个对象的实例
- 返回true和false
- 可以用来判断数组
if( x instanceof Array ){...}
3. 如何判断一个变量是否是数字、字符串、布尔、函数
//判断数字
let a = 1;
console.log(typeof a);
if(typeof a === "number"){
console.log("a is number");
}
//判断字符串
if(typeof b==='string')
//判断布尔
if(typeof c==='boolean')
//判断函数
if(typeof f==='function')
4. NaN是什么? 有什么特别之处?
- NaN表示非数字,它是数字类型,but not a Number
- NaN和任何值都不相等,包括自己
5. 如何把非数值转化为数值?
- number()
- parseInt()
- parseFloat()
- 上边3种方法的参数
- 当只有一个参数时:表示将参数当成10进制转换10进制
- 当有两个参数时:表示将第一个参数当成第二个参数所表示的进制数,转换成10进制数
6. ==与===`有什么区别
- 前者时近似相等:会将数据转化成预期类型,再进行比较
- 后者时绝对相等:先判断类型是否相等=同,若类型相同才进行值的比较
- 如果javascript预期某个位置是布尔值,如下6个值会被转换成false:""、undefined、NaN、0、null、false,其它值都会转换为true
7. break与continue有什么区别
- break:直接跳出循环,即循环停止
- continue:直接进入下一个循环,不会走当前循环后面的代码
8. void 0 和 undefined在使用场景上有什么区别
- void 0:返回undefined
- undefined:表示未知类型,是一个全局对象的属性,但在ES5和ES6中,可以在局部作用域内赋值。(在低版本 IE 中能被重写)
function f(){
var undefined = 10;
console.log(undefined);
}
f();//打印10
- 区别:void 0返回值一定是undefined,undefined却可以在局部作用域内被赋其它值
9. 以下代码的输出结果是?为什么?
console.log(1+1);
console.log("2"+"4");
console.log(2+"4");
console.log(+"4");
- console.log(1+1);
输出2,+号两边都是数字时,做数字加法运算
- console.log("2"+"4");
输出"24",+号的任意一边是字符串,则做字符串拼接
- console.log(2+"4");
输出"24",+号的任意一边是字符串,则做字符串拼接
- console.log(+"4");
输出4,加号只有后面有数据,则直接将它转换为数字
10. 以下代码的输出结果是?
var a = 1;
a+++a;
typeof a+2;
输出"numbe2"(严格的说,后面得用console.log打印才能看到输出结果)
11. 以下代码的输出结果是? 为什么
var a = 1;
var b = 3;
console.log( a+++b );
输出4;因为++比+的优先级高,所以相当于(a++)+b=(1++)+3=1+3=4
12. 遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
代码:
var arr = [3,4,5];
for(let i=0;i<arr.length;i++){
console.log(i*i);
}
13. 遍历 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
代码:
for (let key in obj){
console.log(obj[key]);
}
14. 以下代码输出结果是? 为什么 (选做题目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
var data2 = d = 0 || console.log('haha')
console.log(data2)
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
输出:
// typeof a + b || c >0 ==> ((typeof a)+b)||(c>0) ==> ("number"+2)||true ==>"number2"||true==>"number2"
"number2"
"bb"
//d ==5 && console.log('bb') ==> true && undefined ==> undefined
undefined
"haha"
//d = 0 || console.log('haha') ==> 0 || undefined ==> undefined
undefined
2