JS数据类型、运算符、流程控制语句的相关知识

1、 JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?

一共6种数据类型:数值类型,字符串类型,布尔类型,null,undefined,对象
原始类型有:数值类型,字符串类型,布尔类型
null,undefined被视为特殊类型的值。
复杂类型:对象,一般将对象看成多个个原始类型的值的合成,可以看作是一个存放各种值的容器。
原始类型和复杂类型的区别:(参考 https://zhuanlan.zhihu.com/p/22400319)

  • 如果变量存储的是原始值,那么这个变量就是值类型,在 JS 里也叫做基本类型。

  • 如果变量存储的是内存位置,那么这个变量就是引用类型,在 JS 里也叫复杂类型,也就是对象。

2、typeof和instanceof的作用和区别?

typeof可以返回后面的值是哪种数据类型的

typeof 4   number
typeof "haha"    string
typeof undefined    undefined
typeof false    boolean
function f() {}
typeof f    function
typeof [0,1,2,3,4]    object
其他也都会返回object

instanceof是判断某个对象是不是一个数组的。

var a = {};
var b = [];
a instanceof Array    false
b instanceof Array    true

3、如何判断一个变量是否是数字、字符串、布尔、函数

最简单的就是使用typeof来判断,可以返回相对应的数据类型,如:

typeof 10   number
typeof "haha"    string
typeof undefined    undefined
typeof false    boolean
typeof true    boolean
function a() {}
typeof a    function

4、NaN是什么? 有什么特别之处?

NaN意思是not a number。意指不是一个数字,这是个比较神奇的值,因为它自己都不等于自己。
使用typeof NaN得到的是 number这样的结果。

NaN === NaN    返回false
Number("hsbdsb")   返回NaN

5、如何把非数值转化为数值?

使用Number来进行转化,空字符串会转化为0;使用parseInt()或parseFloat()会将数字转化为整数或浮点数;parseInt()可以在第一个参数后再加一个,意指转化为什么进制的数字。

parseInt(13,10)    13
parseInt(11,2)    3

6、== 与 === 有什么区别?

  • == 是判断值是否相等
  • === 是首先判断值的数据类型是否相同,再判断值是否相同,和==比起来,===更加严密一些。

7、break与continue有什么区别?

循环中,bieak是强制终止循环并跳出循环,执行循环后面的语句;continue是只跳过当次循环,执行下一次循环,而不是强制终止循环。

8、void 0 和 undefined在使用场景上有什么区别

viod运算符的作用是执行一个表达式,并返回undefined

undefined是可以赋值的,因此在JS文件中我们可能无法确认undefined是否被赋值,当需要确认某个变量是否是undefined时,可以使用这样的方法进行判断

var num;
if(num === void 0){
    alert("num is empty")
}

9、以下代码的输出结果是?为什么?

console.log(1+1);    2  计算数字
console.log("2"+"4");   24  字符串拼接
console.log(2+"4");     24  字符串拼接
console.log(+"4");  4   4   字符串转为数字

10、以下代码的输出结果是?

var a = 1;  
a+++a;              //得到3  因为++的优先级比+高,所以就变成了a(++)+a;即1+2
typeof a+2;         //number2     typeof优先级比较高,typeof a得到number再加2,相当于字符串拼接,即number2

11、 以下代码的输出结果是? 为什么

var a = 1;
var b = 3;
console.log( a+++b );           得到4   因为++的优先级比+高,即(a++)+b

12、遍历数组,打印数组每一项的平方

var arr = [3,4,5]
//实现
for(var i = 0; i

13、遍历 JSON, 打印里面的值

var obj = {
 name: 'hunger', 
 sex: 'male', 
 age: 28 
}
//实现
for(var attr in obj){
    console.log(obj[attr])
}

14、以下代码输出结果是? 为什么

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) 
//number2
//原因:typeof优先级比较高,typeof a得到number再加上b得到字符串拼接的结果number2,因为后面是或运算符因此就执行第一个得到number2

var d = 5;
var data = d == 5 && console.log('bb')
console.log(data)
//undefined
//原因:==和&&优先级比=高,==比&&优先级高,所以会先判断d==5这个语句,得到true,因为后面是&&运算符,所以还要向后继续判断;再看&&后面的语句,在控制台打印出bb,得到bb。但是

var data2 = d = 0 || console.log('haha')
console.log(data2)
//undefined
//原因:重新给d赋值,d=0,赋值语句没有问题,得到true,因为后面是或运算符,所以还要向后继续判断,后面的语句在控制台打印出haha,得到haha

var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
//!!是强制转换类型为布尔值;等号后面可以看成两个语句,第一个!!"hello",得到true;第二个(!"world", !!"from here!!")可以转换为(false,true),根据逗号运算符的规律(!"world", !!"from here!!")取最后一个得到的值即true,现在为止就得到:var x = true + true;true与true相加会强制转换为数字进行相加,true可以看成1,就得到x=2.

你可能感兴趣的:(JS数据类型、运算符、流程控制语句的相关知识)