1.null和undefined区别
undefined 继承自null,两者都是浏览器window的一个特殊属性
例:
alert('undefined' in window); //输出:true var anObj = {}; alert('undefined' in anObj); //输出:false
undefined 表示变量未定义或者定义了未赋值的值
例:
var a; alert(a);//输出:undefined alert( typeof b);//输出:undefined alert(b);//产生错误
对于未声明的变量,只能执行一项操作,即使用typeof 检测其数据类型
即便未初始化的变量被自动赋予undefined值,但显示地初始化变量依然是明智的选择。如果能做到这一点,那么当typeof操作符返回undefined值时,我们就知道被检测的变量还没有被声明,而不是尚未被初始化。
null代表空指针对象,所以用typeof检测null回返回"object"
无论在什么情况下没有必要把一个变量显式的设置为undefined;但只要意在保存对象的变量名还没有真正保存对象(实例化),就应该明确地让该变量保存null值。这样做可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。
个人认为null和undefined主要作用是区分未赋值的对象和变量,正确使用null和undefined可以避免一些混乱
2.RegExp类型
var expression=/parttern/flags
var parttenr1=/[bc]at/i
var parttenr2=new RegExp("[bc]at","i")
alert(parttenr2.source);正则表达式字面量值
alert(parttenr2.golbal);是否设置了global标志
alert(parttenr2.ignoreCase);是否设置了i标志
alert(parttern2.multiline);是否设置了m标志
alert(parttern2.lastIndex);整数,表示开始搜索下一个匹配项的字符位置,从0算起
所有元字符都要双重转义:
/\w\\hello\\123\ 等价"\\w\\\\hello\\\\123"
exex()匹配返回一个Array数组,包含2个额外属性,index和input,index表示匹配字符出现的位置,input表示应用正则表达式的字符串
var test="cat bat bat";
var matches=parttern2.exec(text);
alert(matches[0]);
test()方法接受一个字符串参数,匹配模式返回true
3.作用域链(Scope Chain)
JavaScript中的一种重要机制,JS中所有的标识符(Identifier)都是通过Scope Chain来查找值的。
词法作用域(Lexical Scoping)
JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.
这个作用域我们称之为[[scope]]
非内嵌函数的[[scope]]都是宿主对象,不同的宿主会有不同的内容
var i = "w i"; var a =function(){ alert(i); } var b = function(){ var i = "b i"; a(); } var c = function(){ a(); } a(); b(); c();
输出都为 w i
call apply都不继承原型链
只继承函数中定义的方法属性
Function
当一个函数对象被创建时,Function够在其产生的函数对象会运行类似这样的代码:
this.prototype={constructor:this}
新函数对象被赋予一个prototype属性,其值是包含一个constructor属性且属性值为该新函数对象。该prototype对象是存放继承特征的地方,因为JavaScript没有提供一种方法确定哪个函数式打算用来做构造器的