ECMAScriptJS高级程序设计–笔记

1、JS分三只有:ECMAScript、DOM、BOM

      1)ECMAScript:提供基本语言功能

      2)DOM:提供访问同操作网页内容的措施以及接口

      3)BOM:提供和浏览器交互的办法与接口

2、在html页面写js代码,需要拿代码放在<script></script>;并且中间不能够冒出字符串“</script>”

      下方是代码会报错:alert(“</script>”);

       可以本着其进行转义:
alert(“<\/script>”);

3、如果引用外部JS文件时,在标签内的JS代码将被忽视

4、js的六种植多少类:Undefined、Null、Boolean、Number、String、Object

     可以用typeof运算符来检测变量类型;

      –如果值为null,返回 “object”//null被认为是一个拖欠的靶子引用

      –如果是函数,返回  “function”

      –变量为声明或声明非初始化,返回“undefined”

5、undefined 派生自 null ;

     所以 undefined == null ;//true

6、利用函数Boolean(), 任何类型的价都足以转为布尔类型;

      空字符串、0、NaN、null 、undefined 为false,其他价值吗true;

7、Number类型的表现形式:十进制、八进制、十六进制

      –八进制: 以0初始,var num1 = 070; //对应十进制56

      –十六进制:以0x开头,var num2 = 0xA; //对应十进制的10

     扩展:JS的浮点数是冲IEEE754
64员业内(二向前位浮点数标准);

     造成的bug:0.1 + 0.2 != 0.3

8、 0 / 0 = NaN;    1 / 0 = infinity;  -1 / 0 = -infinity;

9、parseInt()  可以分析:十进制、十六上制字符串;

      parseFloat()  只能解析十上前制字符串

10、求一个负数的二进制表现形式

       1)先抱正数的二进制; 

       2)获取反码,即 0 和 1互换  

       3) + 1

11、switch 比较值时适用的凡全等;

12、函数中传递参数,如果是引用类型,也是比照值传递的。

        function setName(obj) {

           obj.name = “llm”;

           obj = new Object();

           obj = “llm1”;

        }

       var person = new Object();

       setName(person);

       alert(person.name);  // llm

      可以领略也它是一个片段的援传递

13、垃圾收集算法

        1)标记清除
(目前主流):对变量打标记(进入环境、离开环境),然后垃圾收集器再按一定的日距离对这些变量进行回收

       
2)引用计数(不常用)会产出循环引用的题材,而致使内存得无至破;

14、执行环境分为:全局执行环境及函数执行环境

15、创建对象的个别栽艺术

       1) var person = new Object();

       2)   var person = {};

16、访问对象的有数栽艺术

       1)通过‘点’来访问:  person.name

       2)通过方括号   : person[“name”]  
 //它的优势在可应用变量来博取对象的性能 person[变量]

17、判断有对象属于哪种档次的实例,可以经 instanceof;

       判断Array,可以利用自带的艺术: Array.isArray(value);

18、栈:后进先出

       队列:先进先出

19、数组的主意:  

       –push()   往数组末尾追加数据,并回到改变后的数组长度

       –pop()    移除数组末尾的价值,并返该结果

      –shift()  移除第一起之价值

      –unshift()  在勤组开始位置插入值

      –reverse()   反转数组

      –sort()   默认按照字符串的条条框框,进行升序排序

                     可以传递一个比函数来支配谁价值在面前,

20、Date对象相关办法

       –getTime()  获取日期对应的总毫秒数; 与valueof()一样

       –getFullYear()   获取四各数年卖

       –getMonth()   获取月份,从0开始

       –getDate()   获取天数

       –getDay()  获取星期几乎 ; 0 星期日   ,6星期六

       –getHours()  获取小时数

       –getMinutes()  获取分钟数

       –getSeconds()  获取秒数

       –getMilliseconds() 获取毫秒数

21、RegExp类型: 正则表达式

        var expression = / pattern / flags ;

        –pattern 代表 正则表达式

        –flags 表示相当的表明:g、i、m,可以组成使用;

           1) g  表示全局搜索;  

           2)i  表示忽略大小写

           3)m  代表多尽追寻

 22、Function 类型

         函数实际上是目标;而函数称单纯是凭于目标的指针;

         var hello = function(){};

       
 所以才没重载;如果定义多个一律的函数时,JS解析时从上到下,所以最终函数称为对了最终一个函数;

23、定义函数的星星点点种植艺术:

       1、函数声明:function hello(){}

       2、函数表达式   var hello  = function(){};

       两者的分别:

     
 1)解析器会对函数声明做一个声明提前的经过;也就是说,不论这函数在哪个岗位定义的,都得先行使用

       2)而函数表达式,只有实行到当下代码行时,才见面叫解析执行;

24、基本包装档次:String、Boolean、Number;它是一模一样种植异常之援类型

     
 虽然她三独属于基本项目,基本型不属对象,所以无应发生主意和特性;

        但是我们掌握string有为数不少智,比如substring();那这是为何呢?

        var str = ‘123123123’; var str1 =
str.substring(2);

        这行代码,后台做了三独操作

         1)创建String类型的一个实例   var
str = new String(‘123123123’);

         2)调用了此实例的点子      
 str.substring(2);

        3)销毁之实例          str =
null;

25、基本包装档次及援类型的界别:在于生命周期;

       — 引用类型的生命周期:在距时作用域之前一直有

       –基本包装档次: 一行代码的履行瞬间;

26、encodeURI() 和encodeURIComponent()的区别

       1)encodeURI 对冒号、正斜杠、#非见面开展编码

       2)encodeURIComponent会对冒号、正斜杠、#齐特殊符号进行编码;

27、 eval()
方法相当给一个完的ECMAScript解析器,它可解析JS代码字符串;

        –需要专注的凡:严格模式下,eval()中定义之变量,在表面看不顶;

28、工厂模式:批量创类似之对象

        function createPerson(name){    var obj = new Object();
 obj.name = name;  return obj;       }

29、构造函数模式:通过new来调用函数

        function Person(name){ this.name = name; }

        var person = new Person();

30、原型模式

     
 创建的每个函数都生一个属性prototype指向一个靶,这个目标涵盖有实例共享的特性与方法;

31、hasOwnProperty()  可以判断属性是否属于有实例的

        –true表示 属于

32、in操作符  可以判断实例是否带有某个属性,无论是在为实例上还是原型上

33、每个函数都发生一个prototype属性,这个特性指向一个对象;这个目标涵盖有实例共享的性能和方式;

       function Person(){};  

       Person.protype.name = ‘haha’;

       Person.prototype 这个特性将富含有实例共享的性与道;

       

      var llm = new Person();   

      alert(llm.name);  // haha

      

      而每个实例都发生一个属于性 [__proto__] ,指向原型对象;

     alert( llm.__proto__.name );   //haha

34、原型对象造成的题材:

        1、创建的实例都产生定点的属于性值;

        2、如果原型中之属于性值是
引用类型,那么通过有实例修改中的价,其他的实例也会相应改变;

        ——————————

  ECMAScript      解决办法:通过构造函数和原型模式做以;

        1)构造函数:用于定义实例属性

        2)原型模式:用于定义方法和共享的性质;

        function Person(name){ this.name = name; }

        Person.prototype.sayName = function(){ alert(this.name); }

        

         _________________________

         上面这种办法就特别好之解决问题了。但是写法不够优雅;

          【动态原型模式】将原型模式写以构造函数中

         function Person(name)

       {

          this.name = name;

          if(typeof this.sayName != “function”){

            //如果这个点子不在,则展开创办

           Person.prototype.sayName = function(){ alert(this.name); };

          }

        }

 

33、arguments.callee  表示着执行的函数的指针;  严格模式下会错;

       function factorial( num ){

         return num * arguments.callee(num-1);

      }

34、修改 window.location.href    值,会自行调用
location.assign()方法,会转历史记录;

        location.replace()  则免见面变动历史记录;

35、scrollIntoView()  
在element上调用这个办法,会以滚动条滚动至该因素上;

        var div = document.getElementById(‘div1’);  

        div.scrollIntoView();