JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
- JavaScript定义了7种数据类型,分别是
"null" : 表示空缺,即此处应该有一个值,但目前为空
"undefined" :表示未定义或不存在,即此处目前没有任何值
"string" :表示字符串,字符组成的文本
"number": 整数或浮点数
"boolean": 布尔值,true或者false,只有这两个值
"object": 对象,数据的无序组合,狭义包括object,数组和函数
"symbol": Symbol 生成一个全局唯一的值。
- 基本类型有
null,undefined,string,number,boolean - 复杂类型有object
- 原始类型是最基本的类型,不能再细分了,复杂类型是基本类型的组合,可以继续拆分成基本类型。
typeof和instanceof的作用和区别?
- typeof用于判断数据类型,(一般建议只用来判断基本类型)
typeof "abc" // "string"
typeof 4 // "number"
typeof true // "boolean"
var a=Symbol() typeof a // "symbol"
typeof [1,2,3,4,5] // "object"
typeof {a:1,b:2,c:3} // "object"
typeof null // "object"
如果我们声明了一个变量b,但是没有赋值的情况去判断他的类型的话,会显示未定义
var b;
typeof b // "undefined"
如果没有没有声明变量就直接去判断他的数据类型时,也会显示undefined
typeof c // "undefined"
typeof有一个bug,如果它用来判断一个函数的数据类型时,会显示function
function f(){};
typeof f // "function"但是数据类型中并没有function
所有就有了instanceof
- instanceof 是用于判断某个对象是不是构造函数的一个实例,举例来说就是一个新声明的变量是不是调用了构造函数的内置属性或方法.
function f(){};
f instanceof Function // true
如何判断一个变量是否是数字、字符串、布尔、函数
假设我们有一个变量a
typeof a === "number" // 那么变量a就是数字
typeof a === "string" // 那么变量a就是字符串
typeof a === "boolean" 那么变量a就是布尔值
typeof a === "function" // 那么变量a就是函数
NaN是什么? 有什么特别之处?
NaN,(Not a Number),表示不可描述的数字,无法表示的数字,特别之处是
任何NaN的值进行操作都会返回一个NaN,NaN !== NaN,他不等于他自己,因为他在内存中的表示不固定。
如何把非数值转化为数值?
假设有非数值 "123.4";
Number("123.4") // 123.4
parseInt("123.4") // 123,只能转换成整数
parseFloat("123.4") // 123.4 可以转成浮点数
还可以在字符串前加“+”,或在字符串后加“-0”
+"123.4" // 123.4
"123.4"-0 // 123.4
如果想把一个数字转换成字符串的话可以给数字加一个空字符串
123.4 + "" // "123.4"
如果要取一个数据的布尔值,可以在他前面加两个感叹号!!,取两次否
var a=2;
!a // false
!!a // true
==与===有什么区别
==表示近似等于,js会在一些情况下进行隐式的类型转换再进行比较。如:
0 == false
0 == []
1 == true
===表示严格相等,数据的类型相同,值相同的情况下才叫严格相等
break与continue有什么区别
- break表示退出循环体,执行循环体后面的代码
- continue表示停止本次循环,开启下一此循环
void 0 和 undefined在使用场景上有什么区别
undefined在JavaScript中并不属于保留字/关键字,因此在IE5.5~8中我们可以将其当作变量那样对其赋值(IE9+及其他现代浏览器中赋值给undefined将无效)
于是采用void方式获取纯正的未经赋值的undefined则成了通用准则。
以下代码的输出结果是? 为什么
console.log(1+1); // 输出2 ,数字之间的相加
console.log("2"+"4"); // 输出"24" ,两个字符串之间的拼接
console.log(2+"4"); //输出"24',数字2转换成字符串后跟“4”拼接
console.log(+"4"); // 输出 数字4,只有一个字符串会转换成数字输出
以下代码的输出结果是?
var a = 1;
a+++a; //输出3,因为++的优先级高于+,可以理解为(a++)+a,而a++的结果是1,但是a已经变为2,相当于1+2,等于3
typeof a+2;//输出“number2”,typeof的优先级高于+,而typeof a等于“number”,"number"+2会把数字2转换成字符串“2”,最后的拼贴结果就是字符串"number2"
var a = 1;
var b = 3;
console.log( a+++b ); //输出结果为4,++运算优先于+运算,理解为(a++)+b,a++结果为1,运算为1+3=4。
遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
for(var i=0;i<arr.length;i++){
console.log(Math.pow(arr[i],2));
}
遍历对象, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(var i in obj){
console.log(obj[i])
}
以下代码输出结果是? 为什么 (选做题目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
结果是字符串 "number2",因为typeof的优先级高于加号,加号的优先级高于或,逻辑运算符或遵循短路原则,如果前面的值为真,则直接返回前面的值,而前面的的值为字符串"number"和数字2的相加,得到字符串"number2",布尔值为真,所以直接返回,不考虑后面的值。
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
输出结果为undefined,因为==的优先级高于逻辑与,逻辑与高于=,所以先算d==5,为真,当逻辑与的前一项为真时,不管后一项的值是什么,都会返回后一项的值,而后一项为在console.log('bb')的输出结果为undefined,所以data = undefined,所以最后data = undefined,console.log(undefined) 会输出undefined.
var data2 = d = 0 || console.log('haha')
console.log(data2)
输出结果是undefined
首先或的优先级高于=,所以先算console.log('haha')的结果为undefined,
0||undefined的结果为undefined,所以d=undefined,所以data2 = undefined,
所以console.log(undefined)的最终结果还是undefined。
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
输入结果是2
首先,括号的优先级最高,先算括号中的,括号中有逗号,直接计算逗号后面的,!!"from here"为true,而!!"Hello'的值也是true,true+true会把true转换成数字1+1,所以最后结果是2.