JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?##
- 数值(number):包括整数和小数
- 字符串(string) :字符组成的文本
- 布尔值(Boolean):true(真)和false(假)两个特定值
- undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值
- null:表示无值,即此处的值就是“无”的状态。
- 对象(object):各种值组成的集合
我们将数值、字符串、布尔值称为原始类型,对象为复杂类型,而undefined和null,一般将它们看成两个特殊值。区别就是原始类型是最基本的数据类型,不能再细分了,而对象往往是多个原始类型的集合,可以看成是一个存放各种数据的容器。
typeof和instanceof的作用和区别?##
typeof 返回一个数据原始的数据类型,结果是一个字符串,可以用typeof 数据的方式判断常见的几大数据类型
instanceof 需要两个参数,用于判断一个变量是否为某个对象的实例,结果是一个布尔值。
var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true
如何判断一个变量是否是数字、字符串、布尔、函数?##
typeof可以判断一个值的数据类型:
typeof 123 // "number" /*数值返回"number"*/
typeof '123' // "string" /*字符串返回"string"*/
typeof false // "boolean" /*布尔值返回"boolean"*/
/*函数返回"function"*/
function f() {}
typeof f // "function"
/*undefined 返回 undefined*/
typeof undefined // "undefined"
/* 其余的返回object*/
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
除此以外,其他情况都返回object。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
NaN是什么? 有什么特别之处?##
NaN含义是Not a Number,表示非数字,NaN和任何值都不相等,NaN不等于自己
如何把非数值转化为数值?##
Number() /*转换为整数或浮点数*/
parseInt() /*转换为整数*/
parseFloat() /*转换为浮点数*/
==与===有什么区别?##
==和===是比较运算符。比较运算符比较两个值,然后返回一个布尔值,表示是否满足比较条件
==表示相等,不同类型的值进行比较时,会进行类型转换,类型相同后再进行值的比较;
===表示严格相等,数据类型和值都相等时才输出true,其中有一个不相等,则输出false
break与continue有什么区别##
break用于强制退出循环体,执行循环后面的语句
continue用于退出本次循环,执行下次循环
void 0 和 undefined在使用场景上有什么区别##
void 运算符会对给定的表达式进行计算,然后返回 undefined。
通常 void 0 会用来获取 undefined。undefined 可能会被重写,但是 void 0 返回的值一定会是 undefined。
以下代码的输出结果是?为什么?##
console.log(1+1); //2 2个运算子都是原始类型值,转为数字,执行加法运算
console.log("2"+"4"); //'24' 2个运算子都是原始类型值,只要有一个是字符串,则2个都转为字符串,执行连接运算
console.log(2+"4"); // '24' 2个运算子都是原始类型值,只要有一个是字符串,则2个都转为字符串,执行连接运算
console.log(+"4"); // 4 只有一个数字参数的时候返回其正值
var a = 1;
a+++a; //相当于(a++)+a a++先返回当前值为1,然后自增a为2,相当于1+2=3
typeof a+2; // 'number2' 相当于(typeof a)+2 'number'+2
var a = 1;
var b = 3;
console.log( a+++b ); //4 a++为1 b为3 相当于 1+3=4
遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
for (var i=0; i<arr.length; i++) {
console.log(arr[i]*arr[i])
}
// 输出 9 16 25
** 遍历 JSON, 打印里面的值**
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(var key in obj) {
console.log(obj[key])
}
//输出 hunger male 28
**以下代码输出结果是? 为什么 **
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
//typeof a 优先级高,typeof a+b输出'number2',或运算符第一个运算子布尔值为true,直接返回第一个的值,输出 'number2'
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
//且运算符左边布尔值为true,返回第二个运算子的值,所以输出'bb',返回undefined
var data2 = d = 0 || console.log('haha')
console.log(data2)
//或运算符左边d=0,布尔值为false,返回第二个运算子的值,输出'haha',返回undefined
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
//括号内,返回逗号后面的值,!!'from here!!'经过2次取反运算符,值为true, !!'Hello' 经过2次取反运算符,值为true,都是原始类型,转化为数值相加,输出2