马上准备面试了,之前一直在学习web的时候,都没来得及总结有关javaScript的知识点,因为在总结了很多前端面试题的奇怪问题后,写了个清单,并根据我所学知识和容易出现的错误进行归类总结,以备当面试时笔试或者面对面面试的时候能有更好的把握。
javaScript 基础知识点
- 数据类型:
- 通常有:
String 字符串,
Number 数字,
Boolean 布尔,
Array 数组,
Object 对象,
Null(值为空),
Undefined(函数未定义)
- 可以用typeof()鉴定变量的类型
- 因为js有弱类型的特征,每次声明或未初始化变量都不会主动表明变量类型,只有在赋值后才能体现变量的类型,故默认的初始化值为undefined - 错的区域
1.Undefind
num是已声明但是未初始化变量,但是它的类型还是为Undefind
age 是未声明而且未初始化变量,但是它的类型也是Undefind,只是它不能当时变量直接使用
var num;
console.log("num:"+typeof num);
console.log("age:"+ typeof age);
console.log("num:"+num);
console.log("age:"+age);
2.null
null表示空对象指针,
undefined类型是派生自Null的,null被用作形容空对象指针,所以在变量为object的时候,可以使用Null作为初始化值,那样变量就会自动指向为object类型
var num=null;
console.log(typeof null);
console.log(typeof num);
3.布尔boolean
转换规则是必须要知道的:
因为在if语句中会使用变量直接作为判断条件。
4.number
- 有两种,整数和浮点数
- NaN是number类型的重点,它是用来表示不规范的数值,为非数值的操作数,NaN值与任何值都不相等,包括本身
- 另外还有isNaN()函数是专门用来判断参数是否为数字的、
- Number(),parseInt(),parseFloat() 为比较常用的数值转换方法。第一个可以用于任何数据类型,后两个,则专门用于把字符串转化为数值。
5,String转换类型:
toString():不用传递参数
String()函数:可以转换任何一种类型为字符串
6.object:这是数据类型的最关键地方
- 实例化对象方法:使用new操作符,一种是通过字面量表示法
- Array(),Date()还有function()类型都是继承Object
- 什么是引用类型?
var obj=new Object();
引用对象有一个很有趣的东西,obj这个变量只是引用了对象,也就是说它只是这个存在于堆内存里面的对象的别称,本身是不会占用内存的。
但是,如果是
var obj=obj2;
如果是这样的话,相当于把obj2在内存中所指向的地址,赋给了obj,那样obj就可以直接访问obj2的地址下的对象
常见问题:null和undefined有什么区别?
经典面试题:
实现一个函数clone,可以对js的5种主要数据类型进行复制
• 考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚
• 考察点2:是否知道如何判断一个变量是什么类型的
• 考察点3:递归算法的设计
方法一:
Object.prototype.clone=function(){
var o=this.constructor===Array?[]:{};
for(var e in this){
o[e]=typeof this[e] ==="object"?this[e].clone():this[e];
}
retuen o;
}
方法二:
//方法二:
/**
* 克隆一个对象
* @param Obj
* @returns
*/
function clone(Obj) {
var buf;
if (Obj instanceof Array) {
buf = []; //创建一个空的数组
var i = Obj.length;
while (i--) {
buf[i] = clone(Obj[i]);
}
return buf;
}else if (Obj instanceof Object){
buf = {}; //创建一个空对象
for (var k in Obj) { //为这个对象添加新的属性
buf[k] = clone(Obj[k]);
}
return buf;
}else{ //普通变量直接赋值
return Obj;
}
}