ECMAScriptJS高级程序设计–笔记

① 、JS分八个部分:ECMAScript、DOM、BOM

      1)ECMAScript:提供基本语言成效

      2)DOM:提供访问和操作网页内容的方法和接口

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

贰 、在html页面写js代码,须要将代码放在<script></script>;并且中间无法出现字符串“</script>”

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

       可以对它进行转义:
alert(“<\/script>”);

三 、假使引用外部JS文件时,在标签内的JS代码将被忽略

四 、js的各类数据类型:Undefined、Null、Boolean、Number、String、Object

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

      –假如值为null,再次回到 “object”//null被认为是一个空的对象引用

      –要是是函数,重返  “function”

      –变量为申明大概注脚未开首化,再次回到“undefined”

5、undefined 派生自 null ;

     所以 undefined == null ;//true

六 、利用函数Boolean(), 任何项目标值都可以转为布尔类型;

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

柒 、Number类型的表现格局:十进制、八进制、十六进制

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

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

     扩充:JS的浮点数是依据IEEE754
6肆个人业内(二进位浮点数标准);

     造成的bug:0.1 + 0.2 != 0.3

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

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

      parseFloat()  只好解析十进制字符串

十 、求壹个负数的二进制表现情势

       1)先取得正数的二进制; 

       2)获取反码,即 0 和 1沟通  

       3) + 1

1① 、switch 比较值时适用的是全等;

1贰 、函数中传递参数,假设是援引类型,也是按值传递的。

        function setName(obj) {

           obj.name = “llm”;

           obj = new Object();

           obj = “llm1”;

        }

       var person = new Object();

       setName(person);

       alert(person.name);  // llm

      可以知晓为它是一个部分的引用传递

1叁 、垃圾收集算法

        1)标记清除
(近日主流):对变量打标记(进入环境、离开环境),然后垃圾收集器再依据稳定的日子间隔对这么些变量进行回收

       
2)引用计数(不常用)会冒出循环引用的标题,而致使内存得不到清除;

1四 、执行环境分为:全局执行环境和函数执行环境

1伍 、创立对象的三种方法

       1) var person = new Object();

       2)   var person = {};

16、访问对象的三种艺术

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

       2)通过方括号   : person[“name”]  
 //它的优势在于可以行使变量来拿到对象的属性 person[变量]

1⑦ 、判断有个别对象属于哪类档次的实例,可以透过 instanceof;

       判断Array,可以行使自带的章程: Array.isArray(value);

1捌 、栈:后进先出

       队列:先进先出

1玖 、数组的法子:  

       –push()   往数组末尾追加数据,并赶回改变后的数首席营业官度

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

      –shift()  移除第壹项的值

      –unshift()  在数组初阶地方插入值

      –reverse()   反转数组

      –sort()   暗中同意依照字符串的条条框框,举办升序排序

                     可以传递1个比较函数来决定哪些值在头里,

20、Date对象相关办法

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

       –getFullYear()   获取2个人数年份

       –getMonth()   获取月份,从0初阶

       –getDate()   获取天数

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

       –getHours()  获取小时数

       –getMinutes()  获取分钟数

       –getSeconds()  获取秒数

       –getMilliseconds() 获取皮秒数

2壹 、RegExp类型: 正则表达式

        var expression = / pattern / flags ;

        –pattern 表示 正则表达式

        –flags 代表十三分的申明:g、i、m,可以结合使用;

           1) g  表示全局搜索;  

           2)i  表示忽略大小写

           3)m  表示多行追寻

 22、Function 类型

         函数实际上是目的;而函数名只是指向目的的指针;

         var hello = function(){};

       
 所以才没有重载;若是定义两个一律的函数时,JS解析时从上到下,所以最终函数名指向了最后1个函数;

2③ 、定义函数的两种情势:

       壹 、函数注明:function hello(){}

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

       两者的区分:

     
 1)解析器会对函数注明做2个声称提前的进度;约等于说,不论这一个函数在哪个岗位定义的,都可以预先使用

       2)而函数表达式,唯有执行到日前代码行时,才会被分析执行;

2④ 、基本包装档次: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;

2⑤ 、基本包装档次和引用类型的分裂:在于生命周期;

       — 引用类型的生命周期:在离开当前成效域从前平素存在

       –基本包装档次: 一行代码的推行须臾间;

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

       1)encodeURI 对冒号、正斜杠、#不会进展编码

       2)encodeURIComponent会对冒号、正斜杠、#等特殊符号举办编码;

2柒 、 eval()
方法也就是3个全部的ECMAScript解析器,它可以解析JS代码字符串;

        –需求小心的是:严苛情势下,eval()中定义的变量,在外部访问不到;

2⑧ 、工厂方式:批量开立类似的对象

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

2玖 、构造函数形式:通过new来调用函数

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

        var person = new Person();

30、原型形式

     
 创造的各类函数都有一个特性prototype指向四个对象,那几个目的涵盖全数实例共享的性质和方法;

3① 、hasOwnProperty()  可以判断属性是不是属于有个别实例的

        –true表示 属于

3贰 、in操作符  可以看清实例是或不是包涵某些属性,无论是存在于实例上依旧原型上

3叁 、每一种函数都有多少个prototype属性,那个性格指向一个目的;那一个目标涵盖全部实例共享的属性和形式;

       function Person(){};  

       Person.protype.name = ‘haha’;

       Person.prototype 那些性格将含有全体实例共享的属性和艺术;

       

      var llm = new Person();   

      alert(llm.name);  // haha

      

      而各种实例都有3个属性 [__proto__] ,指向原型对象;

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

3肆 、原型对象造成的标题:

        壹 、成立的实例都有一定的属性值;

        贰 、假使原型中的属性值是
引用类型,那么通过有个别实例修改其中的值,其余的实例也会相应变更;

        ——————————

        消除办法:通过构造函数和原型情势组合使用;

        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); };

          }

        }

 

3三 、arguments.callee  代表正在履行的函数的指针;  严峻情势下会出错;

       function factorial( num ){

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

      }

3④ 、修改 window.location.href    值,会活动调用
location.assign()方法,会扭转历史记录;

        location.replace()  则不会转变历史记录;

3伍 、scrollIntoView()  
在element上调用这么些方法,会将滚动条滚动至该因素上;

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

        div.scrollIntoView();