JS基础笔记

1.JavaScript只有一个单一的数字类型,它在内部被表示为64位的浮点数。因此1和1.0是相同的值。值NaN是一个数值,它表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它本身。值Infinity表示全部大于1.79769313486231570e+308值javascript

2.JavaScript在被建立的时候,Unicode是一个16位的字符集,因此JavaScript中全部字符都是16位的。 JavaScript没有字符类型,要表示一个字符,只须建立仅包含一个字符的字符串便可。java

3.字符串有一个length属性正则表达式

4.字符串是不可变的,一旦字符串被建立,就永远没法改变它。但经过+运算符去链接其余的字符串从而获得一个新字符串是很容易的。‘c’+'a'+'t'==='cat'是true编程

5.在JavaScript中下面列出的值被看成假 false,null,undefined,空字符串‘ ’,数字0,数字NaN 其它全部值都被看成真,包括true.字符串‘false’,以及全部对象数组

6.typeof运算符产生的值有‘number’,‘string’,'boolean','undefined','function'和‘object’ *****************************闭包

7.javascript的简单类型包括数字,字符串,布尔值(true和false),null值和undefined值。其它全部的都是对象。数字,字符串和布尔值“貌似”对象,由于它们拥有方法,但它们是不可变的。JavaScript中的对象是可变的键控集合。在JavaScript中,数组是对象,函数是对象,正则表达式是对象,固然,对象天然也是对象。   对象是属性的容器,其中每一个属性都拥有名字和值。属性的名字能够是包括空字符串在内的任意字符串。属性值能够是除undefined值以外的任何值。   javaScript中的对象是无类别的,它对新属性的名字和值没有约束。对象适合用于收集和管理数据。对象能够包含其余对象。   javascript包括一个原型链特性。容许对象继承另外一个对象的属性。正确地使用它能减小对象初始化的时间和内存消耗。app

8.对象字面量   对象字面量提供了一种很是方便地建立新对象值的表示法。一个对象字面量就是包围在一对花括号中的零或多个“名/值”对。逗号用来分隔多个“名/值”对。属性的值能够从包括另外一个对象字面量在内的任意表达式中得到。对象是可嵌套的。编程语言

9.检索  要检索对象中包含的值,能够采用在[]后缀中括住一个字符串表达式。若是字符串表达式是一个常数,并且它是一个合法的JavaScript标识符而并不是保留字,那么也能够用.表示法代替.优先考虑使用.表示法。 stooge['first-name']           flight.departure.IATA  若是你检索一个并不存在的成员元素的值,将返回一个undefined值。        ||运算科符能够用来填充默认值:       var middle = stooge['middle-name'] || "(none)"       var status = flight.status || "unknown"; 尝试检索一个undefined值将会致使TypeError异常。之能够经过&&运算符来避免错误函数

10.更新    对象中的值能够经过赋值语句来更新。若是属性名已经存在于对象中,那么这个属性的值被替换。若是对象以前并无拥有那个属性名,那么该属性就被扩充到该对象中。this

11.引用    对象经过引用来传递。它们永远不会被拷贝。

12.原型    每一个对象都链接到一个原型对象,并用它能够从中继承属性。全部经过对象字面量建立的对象都链接到Object.prototype这个JavaScript中标准的对象。

   当你建立一个新对象时,你能够选择某个对象做为它的原型。JavaScript提供的实现机制杂乱而复杂,但其实它能够被明显地简化。咱们将给Object增长一个beget方法,这个beget方法建立一个使用原对象做为其原型的新对象。

   if(typeof Object.beget !== 'function'){  Object.beget = function(o){   var F = function(){};   F.prototype = o;   return new F();

       };     }

   var another_stooge = Object.beget(stooge);

   原型链接在更新时是不起做用的,当咱们对某个对象作出改变时,不会触及到该对象的原型。       原型链接只有在检索值的时候才被用到。若是咱们尝试去获取对象的某个属性值,且该对象没有此属性名,那么JavaScript会试着从原型对象中获取属性值。若是那个原型对象也没有该属性,那么再从它的原型中寻找,依此类推,直到该过程最后到达终点Object.prototype.若是想要的属性彻底不存在于原型链中,那么结果就是undefined值。这个过程称为“委托”。  原型关系是一种动态的关系。若是咱们添加一个新的属性到原型中,该属性当即对全部基于该原型建立的对象可见。

13. 反射  注意原型链中的任何属性都会产生一个值。有两个方法去处理这些不须要的属性。第一个是让你的程序检查并剔除函数值。通常来讲作反射的目标是数据,所以你应该意识到一些值可能会是函数。   另外一个方法是使用hasOwnProperty方法,若是对象拥有独有的属性,它将返回true。hasOwnProperty方法不会检查原型链。

14.枚举   for in 语句可用来遍历一个对象中的全部属性名。该枚举过程会列出全部的属性--包括函数和你可能不关心的原型中的属性---因此在必要过滤掉那些你不想要的值。最为经常使用的过滤器是hasOwnProperty方法,以用用typeof来排除函数;   var name;  for(name in another_stooge){   if(typeof another_stooge[name] !=='function'){   document.writeln(name + ':'+another_stooge[name]);  } }属性名出现的顺序是不肯定的。

15.删除   delete运算符能够用来删除对象的属性。它将会移除对象中肯定包含的属性,它不会触及原型链中的任何对象。删除对象的属性可能会让来自原型链中的属性浮现出来

16.减小全局变量污染    javaScript能够很随意地定义那些可保存全部应用资源的全局变量。不幸的 ,全局变量消弱了程序的灵活性,因此应该避免。   最小化使用全局变量的一个方法是在你的应用中只建立惟一一个全局变量。   var MYAPP= {};  该变量此时变成了你的应用的容器。 ****************************** 函数包含一组语句,它们是JavaScript的基础模块单元,用于代码复用,信息隐藏和组合调用。

17.函数对象    在JavaScript中函数就是对象。对象是“名/值”对的集合并拥有一个链接到原型对象的隐藏链接。对象字面量产生的对象链接到Object.prototype。函数对象链接到Function.prototype(该原型对象自己链接到Object.prototype).每一个函数在建立时附加有两个附加的隐藏属性:函数的上下文和实现函数行为的代码(JavaScript建立一个函数对象时,会给该对象设置一个‘调用’属性。当JavaScript调用一个函数时,可理解为调用此函数的‘调用’属性)。   每一个函数对象在建立时也随带有一个prototype属性,它的值是一个拥有constructor属该且值即为该函数的对象。这和隐藏链接到Function.prototype彻底不一样。   由于函数是对象,因此它们能够像任何其余的值同样被使用。函数能够存放在变量,对象和数组中,函数能够被看成参数传递给其余函数,函数也能够再返回函数,并且,由于函数是对象,因此函数能够拥有方法。   函数的不同凡响以外在于它们能够被调用。

18,函数字面量    函数对象能够经过函数字面量来建立:    var add = function(a,b){ return a+ b;}    函数字面量包括4个部分。第一个部分是保留字function.第二个部分是函数名,它能够被省略。函数能够用它的名字来递归地调用 本身。若是没有给函数命名,它就匿名函数。函数的第三个部分是包围在圆括号中的一组参数。其中每一个参数用逗号分隔。这些名称被定义为函数中的变量。它们不像变通的变量那样被初始化为undefined,而是在该函数被调用时初始化为实际提供的参数的值。第四部分是包围在花括号中的一组语句。      函数字面量能够出如今任何容许表达式的地方。函数也能够被定义在其余函数中。一个内部函数天然能够访问本身的参数和变量,同时它也能方便地访问它被嵌套在其中的那个函数的参数与变量。经过函数字面量建立的函数对象包含一个链接到外部上下文的链接。这被称为“闭包”。它是JavaScript强大表现力的根基。

19.调用

 调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数,除了声明时定义的形式参数,每一个函数接收两个附加的参数:this和arguments.参数this在面向对象编程中很是重要,它的值取决于调用的模式。在javascript中有4种调用模式:方法调用,函数调用,构造器调用和apply调用。这此模式在如何初始化this上存在差别。  调用运算符是跟在任何产生一个函数值的表达式以后的一对圆括号,圆括号内可包含零个或多个用逗号隔开的表达式。每一个表达式产生一个参数值。每一个参数值被赋予函数声明时定义的形式参数名。当实际参数的个数与形式参数的个数不匹配时不会致使运行时错误。若是实际参数值过多了,超出的参数值将被忽略,若是参数值过少,缺乏的值将会被替换为undefined。对参数值不会进行类型检查:任何类型的值均可以被传递给参数。 1》方法调用模式    当一个函数被保存为对象的一个属性时,咱们称它为一个方法。当一个方法被调用时,this被绑定到该对象。若是一个调用表达式包含一个属性存取表达式(即一个.点表达式或[]下标表达式),那么它被看成一个方法来调用。   //建立myObject,它有一个value属性和一个increment方法   //increment方法接受一个可选的参数。若是参数不是数字,那么默认使用数字1

 var myObject = {   value:0;   increment:function(inc){  this.value += typeof inc==='number'?inc:1; }};   myObject.increment();   document.writelen(myObject.value);//1   myObject.increment();   document.writelen(myObject.value);//3   方法可使用this去访问对象,因此它能从对象中取值或修改该对象。this到对象的绑定发生在调用的时候。这个“超级”迟绑定使得函数能够对this高度复用。经过this可取得它们所属对象的上下文的方法称为公共方法。

2》函数调用模式    当一个函数并不是一个对象的属性时,那么它被看成一个函数来调用:    var sun = add(3,4); //sun的值为7   当函数以此模式调用时,this被绑定到全局对象。这是语言设计上的一个错误。假若语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this变量。这个设计错误的后果是方法不能利用内部函数来帮助它工做,由于内部函数的this被绑定了错误的值,因此不能共享该方法对对象的访问权。幸运的是,有一个很容易的解决方案:若是该方法定义一个变量并给它赋值为this,那么内部函数就能够经过那个变量访问到this.按照约定,我给那个变量命名为that;   //给myObject增长一个double方法   myObject.double = function(){  var that = this;//解决方法         var helper = function(){          that.value = add(that.value,that.value);          };          helper();//以函数形式调用helper          };      //以方法的形式调用double    myObject.double();    document.writelen(myObject.getValue());//6

3》构造器调用模式      javascript是一门基于原型继承的语言。这意味着对象能够直接从其余对象继承属性。该语言是无类别的。    若是在一个函数前面带上new来调用,那么将建立一个隐藏链接到该函数的prototype成员的新对象,同时this将会被绑定到那个新对象上。    //建立一个名为Quo的构造器对象。它构造一个带有status属性的对象    var Quo = function(String){       this.status = string;   };    //给Quo的全部实例提供一个名为get_status的公共方法。    Quo.prototype.get_status = function(){    return this.status;    };    //构造一个Quo实例    var myQuo = new Quo("confused");    document.writeln{myQuo.get_status()};//使人困惑    目的就是结合new前缀调用的函数就是构造器函数。按照约定,它们保存以大写格式命名的变量里。若是调用构造器函数时没有在前面加上new ,可能发生很是糟糕的事情,即没有编译时警告,也没有运行时警告,因此大写给定很是重要。 不推荐使用这种形式的构造器函数

4》Apply调用模式

   由于javascript是一门函数式的面积对象编程语言,因此函数能够拥有方法。    apply方法让咱们构建一个参数数组并用其去调用函数。它也容许咱们选择this的值。apply方法接收两个参数。第一个是将被绑定给this的值。第二个就是一个参数数组。    //构造一个包含两个数字的数组,并将它们相加。    var array = {3,4};    var sun = add.apply{null,array};//sum值为7    //构造一个包含status成员的对象    var statusObject = {     status:'A-ok'   };        //statusObject并无继承自Quo.prototype,但咱们能够在statusObject上调    //用get_status方法,尽管statusObject并无一个名为get_status的方法。    var status = Quo.prototype.get_status.apply{statusObject};    //status值为“A-OK”   20.参数    当函数被调用时,会获得一个“免费”奉送的参数,那就是argumentss数组。经过它函数能够访问全部它被调用时传递给它的参数列表,包括那些没有被分配给函数声明时定义的形式参数的多余参数。    arguments并非一个真正的数组。它只是一个“相似数组”的对象。arguments拥有一个length属性,但它缺乏全部的数组方法。

21.返回    return语句可用来使函数提早返回。一个函数老是会返回一个值,若是没有指定返回值,则返回undefined.

22.异常    var add = fucntion(a,b){  if(typeof a !=='number' || typeof b !=='number' ){   throw{      name:'TypeError',                 message:'add needs numbers'}; }            return a + b; }   throw语句中断函数的执行,它应该抛出一个exception对象,该对象包含可识别异常类型的name属性和一个描述性的message属性。你也可添加其余属性。

22.给类型增长方法    javascript容许给语言的基本类型增长方法。经过Object.prototype添加方法来使得该方法对全部对象可用。这样的方式对函数,数组,字符串,数字,正则表达式和布尔值一样适用。举例来讲,咱们能够经过给Function.prototype增长方法来使得该方法对全部函数可用

23.模块       模块是一个提供接口却隐藏状态与实现的函数或对象。经过使用函数去产生模块,咱们几乎能够彻底摒弃全局变量的使用,从而缓解这个JavaScript的最为糟糕的特性之一所带来的影响。

24.级联      有一些方法没有返回值,如,一些设置或修改对象的某个状态却不返回任何值的方法就是典型的例子。若是咱们让这些方法返回this而不是undefined,就能够启用级联。在一个级联中,咱们能够在单独一条语句中依次调用同一个对象的不少方法。

25.套用        套用容许咱们将函数与传递给它的参数相结合产生一个新的函数、     var add1 = add.curry(1);     document.writeln(add1(6));//7     add1是把1传递给add函数的curry方法后建立的一个函数。add1函数把传递给它的参数的值加1.

*********************************************************** 继承      js是一门弱类型语言,从不须要类型转换,对象的起源是可有可无的。对于一个对象来讲重要的是它能作什么,而不是它从那里来。

相关文章
相关标签/搜索