JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
JavaScript 定义了6种数据类型:
- 数值(number):整数和小数(比如1和3.14)
- 字符串(string):字符组成的文本(比如"Hello World")
- 布尔值(boolean):true(真)和false(假)两个特定值
- undefined:表示“未定义”或不存在,即此处目前没有任何值
- null:表示空缺,即此处应该有一个值,但目前为空
- 对象(object):各种值组成的集合
原始类型:
- 数值、字符串、布尔值称为原始类型(primitive type)的值,即它们是最基本的数据类型,不能再细分了。
复杂类型:
- 将对象称为复杂类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。
至于undefined 和 null,一般把他们看成两个特殊的值
typeof和instanceof的作用和区别?
- typeof的作用
- typeof是一元运算符,返回值为字符串,该字符串用来说明运算数的数据类型用来获取运算数的数据类型。返回的值有number、boolean、undefined、function、object、string
- number:数字会返回number类型
- boolean:boolean值只有true和false
- undefined:当变量未被声明时会返回undefined,这与
var name;alert(name);
是不一样的。后者是指变量已声明,但未被初始化。 - function:当运算数为函数时,返回function
- obeject:对象、数组、null会返回object。正因为typeof遇到数组、null都会返回object,所以我们要判断某个对象是否是数组或者某个变量是否是对象的实例时就要使用instanceof
- string:当运算数为字符串时会返回string
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
-
instanceof的作用
- instanceof用于判断某个变量是否是某个对象的实例,返回值为true或false用法
如何判断一个变量是否是数字、字符串、布尔、函数
typeof 123 === 'number' 判断是否是数字
typeof '123' === 'string' 判断是否为字符串
typeof true === 'boolean' 判断是否为布尔
typeof f === 'function' 判断是否为函数
NaN是什么? 有什么特别之处?
- NaN含义是Not a Number,表示非数字,NaN和任何值都不相等,包括自己
NaN == NaN; //false
parseInt('abc'); //NaN
如何把非数值转化为数值?
- 下面三个函数都可以把非数值转化为数值
Number("123")
parseInt("123")
parseFloat("123")
==与===有什么区别
- 简单说,它们的区别是相等运算符(==)比较两个值是否相等,严格相等运算符(===)比较它们是否为“同一个值”。如果两个值不是同一类型,严
格相等运算符(===)直接返回false,而相等运算符(==)会将它们转化成同一个类型,再用严格相等运算符进行比较。
break与continue有什么区别
- break 用于强制退出循环体,执行循环后面的语句
- continue 用于退出本次循环,执行下次循环
void 0 和 undefined在使用场景上有什么区别
- void 的作用是执行一个表达式,然后返回undefined。
- undefined可以在局部作用域中被覆写,而void运算返回值都是undefined。
以下代码的输出结果是?为什么?
console.log(1+1); //输出2,两个数字加法运算
console.log("2"+"4"); //输出'24',两个字符串类型的做字符串拼接
console.log(2+"4"); //输出'24',一个是数字一个是字符串,数字转化为字符串后拼接
console.log(+"4"); //输出4,只有一个字符串会转换成数字输出
以下代码的输出结果是?
var a = 1;
a+++a; // ++运算符 比+运算符的优先级高,所以同等于 (a++) + a , (a++) 结果是1,但是a已经变成2 ,所以 1+2 得到 3
typeof a+2; // typeof 优先级比+运算符 优先级高 , 所以 (typeof a ) + 2 得到 number2
以下代码的输出结果是?为什么?
var a = 1;
var b = 3;
console.log( a+++b ); // (a++) + b , (a++)结果为1, 所以 1+3 得到 4
遍历数组,把数组里的打印数组每一项的平方
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 ( a in obj) { console.log( a + ":" + obj[a]) }
以下代码输出结果是? 为什么 (选做题目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) // "number2" , 根据优先级,val = [(typeof a) + b] || (c>0) ----- val = "number2" || true ------- val = "number2"
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data) // "bb" , data = true && "bb" , data = "bb"
var data2 = d = 0 || console.log('haha')
console.log(data2) // "haha" , data2 = d = 0 || "haha" , data2 = d = "haha" , data2 = "haha"
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x) // 2 , true + true = 2