JavaScript 相关

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没有提供一种方法确定哪个函数式打算用来做构造器的

原文地址:https://www.cnblogs.com/FlyCat/p/2580004.html