JavaScript 定义了几种数据类型? 哪些是原始类型?
- 共有六种
数值(number):整数和小数(比如1和3.14)
字符串(string):字符组成的文本(比如"Hello World")
布尔值(boolean):true(真)和false(假)两个特定值
undefined:表示“未定义”或不存在,即此处目前没有任何值
null:表示空缺,即此处应该有一个值,但目前为空
对象(object):各种值组成的集合
-
原始类型
数值、字符串、布尔值,即基本数据类型
哪些是复杂类型?原始类型和复杂类型的区别是什么?
-
对象是复杂类型,分成三个子类型
狭义的对象(object)
数组(array)
函数(function)
正则表达式 (regexp) - 区别
1 一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器;
2 基本类型变量存的是值,复杂类型的变量存的是内存地址;
3 基本类型在赋值的时候拷贝值,复杂类型在赋值的时候只拷贝地址,不拷贝值;
typeof和instanceof的作用和区别?
-
typeof运算符 :可以返回一个值的数据类型.用来检测一个对象是否已经定义或者是否赋值.
1)原始类型
数值、字符串、布尔值分别返回number、string、boolean。
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
2)函数返回function。
3)undefined返回undefined。
4)除此以外,其他情况都返回object。
-
instanceof
instanceof主要的目的是检测引用类型,判断对象是Array,还是RegExp
var array=new Array();
var object=new Object();
var regexp=new RegExp();
function func(){};
var func1=new func();
alert(array instanceof Array); //true
alert(object instanceof Object); //true
alert(regexp instanceof RegExp); //true
alert(func1 instanceof func); //true
-
区别
ypeof和instanceof的目的都是检测变量的类型,两个的区别在于typeof一般是检测的是基本数据类型,instanceof主要检测的是引用类型!
如何判断一个变量是否是数字、字符串、布尔、函数
typeof 1 // "number"
typeof "asd" // "string"
typeof true // "boolean"
typeof function{alert("asd");} // "function"```
## NaN是什么? 有什么特别之处?
- NaN(Not a number),表示非数字,NaN和任何值都不相等,自己不等于自己:
`NaN == NaN //false`
## 如何把非数值转化为数值?
- parseInt()将参数转化为整数
parseFloat()将参数转化成浮点数
number()将参数转换成数字类型
## ==与===有什么区别
- ===不会自动转换数据类型,只当**数据类型和值两者都一致**才返回ture;NaN和自身不相等.
而==会自动转换数据类型再比较,若值相等则返回ture.
## break与continue有什么区别
- break 用于强制退出循环体,执行循环后面的语句
- continue 用于退出本次循环,执行下次循环
for(var i = 1; i< 10; i++){
if(i % 4 === 0){
break; //若执行到这一步,就终止外面的for循环体.
}
console.log(i);
}
for(var i = 1; i< 10; i++){
if(i % 4 === 0){
continue; //若执行到这一步,就跳过 i = 4的打印结果.然后继续i = 5的计算.
}
console.log(i);
}
## void 0 和 undefined在使用场景上有什么区别
- **void 0**:它是一个一元操作符,它的唯一作用就是返回一个undefined,不管这个操作符后面传的操作数是什么
1.点击不做跳转
<a href="javascript:void(0);">
Click here to do nothing
</a>```
2.用于闭包避免解析错误
void function fn(){
console.log("I will show immediately.")
}()
为什么不直接使用undefined这个值的字面量形式呢?
:因为undefined
既不是保留字,也不是关键字,它可以作为变量标识符赋值,所以你手写出来的undefined是有可能被覆盖的
-
undefined
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
以下代码的输出结果是?为什么?
console.log(1+1); // 2
原因: 都是数值类型相加.1+1=2.
console.log("2"+"4");// "24"
: 字符串拼接.
console.log(2+"4"); // "24"
: 一个数值与一个字符串相加时,会把其中的数值转为字符串,结果就是2个字符串拼接.
console.log(+"4");// 4
:+会将字符串转换为数字.
以下代码的输出结果是?
var a = 1;
a+++a;
typeof a+2;//"number2"
因为:
var a = 1;
(a++)+a; //1+1=2
(typeof a)+2; //"number"+2="number2"
以下代码的输出结果是? 为什么
var a = 1;
var b = 3;
console.log( a+++b );//4
: ( a+++b )= (a++)+b;
而(a++)+b=1+3=4;
遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
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
}```
答:
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(i in obj){ console.log(i+":"+ obj[i])}
## 以下代码输出结果是? 为什么 (选做题目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) //number2
: 因为typeof的优先级较高所以typeof a 为number,此后又与b拼接为"number2",对于||运算符,两边都为true则返回前者
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)//"bb"
:因为&&左边为true,
而对于 expr1 && expr2,如果expr1 能转换成false则返回expr1,否则返回expr2.
var data2 = d = 0 || console.log('haha')
console.log(data2)//"haha"
: ||的左边=0,即false
对于expr1 || expr2,如果expr1能转换成true则返回expr1,否则返回expr2
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)//2
:右边为 ture+ (false,true). = 1+1=2
---
[参考](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
运算符:
![Paste_Image.png](https://img.haomeiwen.com/i735918/1a20103c462901ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
网友评论