阅读 99
JavaScript基础学习(1)

JavaScript基础学习(1)

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

1,JS基础

1:原始值:存储在 stack 中

Number  String Boolean  undefind null
复制代码

2:引用值:存储在 heap 中

array  object function  date  regExp
复制代码

3:逻辑运算符 && || !

// undefined ,null, NaN ,"" ,0, false  => false
var a = 1 && 2;

先看第一个表达式转换成布尔值的结果,如果结果为真,那么它会看第二个表达式转换成为布尔值的结果,

如果第一个结果为false,直接返回第一个表达式的值
复制代码

4: typeof 返回值六种

number  string boolean object undefind function

其中 typeof(null) == object

    typeof(undefind) == undefind 
复制代码

5: 类型转换

 number(null)= 0;

  isNaN(null) == false isNaN(undefind) == false

  隐式类型装换:Number  

  +-x%/ 除了加号,都要隐式转换 Number()

  NaN!= NaN

  undefined == null
复制代码

2, JS 继承

1:借用构造函数

2:共享原型

  Son.prototype = Father.prototype;
复制代码

3: 圣杯模式:最完美的继承模式

    function inherit(Target,Origin){

                function F(){};

                F.prototype = Origin.prototype;

                Target.prototype = new F();

               Target.prototype.constructor = Target;

           Target.prototype.uber = Origin.prototype;

            }
复制代码

3, 数组

1>,push(),数组末尾添加数据

    /*覆盖系统push方法*/

            var arr=[1,2];

            Array.prototype.push = function (){

                 for(var i=0;i<arguments.length;i++){

                     this[this.length] = arguments[i];

                 }

                 return this.length;

            }
复制代码

2>,pop(),把数组的最后一位剪切出来

3>,unshift(),在数组前面添加元素

4>,shift()

5>,splice()分割   arr.splice(从第几位开始,截取多少的长度,在切口处添加新的数据)

     splice()还可以添加元素,splice(3,0,4)从第三位开始截取,截0个,在切口处添加元素4
6>,sort()排序

           arr = [1,3,4,0,9,-1,10];

            /*sort方法可以带参数,匿名函数  

             函数必须写两个参数, 看返回值, 大于0,正序,小于0,倒序

             * */

            arr.sort(function(a,b){

                return a-b; //正序

            });

            arr.sort(function(a,b){

                return b-a;//倒序

            });

    /*给一个有序的数组乱序*/

            arr.sort(function(){

               return Math.random()- 0.5;

            }); 

     对象按照年龄大小排序

     var arr=[cheng,deng,zhang];

            arr.sort(function(a,b){

                a.age -b.age;

            });

   var arr = ['ab郑黎明的加上','afad','ccccc','adfadfadfada']

            /*按照字符排序*/

            arr.sort(function(a,b){return a.length-b.length;});

            /*按照字节排序*/

            function retBytes(str){

                var num = str.length;

                for(var i=0;i<str.length;i++){

                    if(str[i].charCodeAt()>255){

                        num++;

                    }

                }

                return num;

            }

            arr.sort(function(a,b){

             return    retBytes(a)-retBytes(b);

            });
复制代码

8>:类数组  例如:arguments

  var obj={

                "0":'a',

                "1":'b',

                "2":'c',

                "length":3,

                "push":Array.prototype.push,

                "splice":Array.prototype.splice

            }

            //属性要为索引数字属性,必须要有length属性,最好加上push
复制代码

9>:    /typeof函数实现原理/

        /*分两类,原始值和应用值*/

         function myType(target){

             var template = {

                 "[object Array]" : "array",

                 "[object Object]": "object",

                 "[object Number]": "number - object",

                 "[object Boolean]":"boolean - object",

                 "[object String]" :"String - object"

             }

             if(target == null){

                 return "null";

             }

             if(typeof(target) == 'function'){

                 return 'function';

             }else if(typeof(target) == 'object'){//数组,对象,和包装类

                 var  str = Object.prototype.toString().call(target);

                 return template[str];

             }else{

                 return typeof(target);

             }

         }
复制代码

10>:/数组去重/

         Array.prototype.unique = function(){

             var temp = {};

             var arr = [];

             var len = this.length;

             for(var i=0;i< len;i++){

                if(!temp[this[i]]){

                     temp[this[i]] = 'abc';

                     arr.push(this[i])

                }

             }

             return arr;
         }
         
复制代码

4, 立即执行函数

1:针对初始化功能的函数:

(function(){

}())
复制代码

这个就是立即执行函数,执行完之后,立即被释放,再也找不到了

或者:(function(){})()
复制代码

5, 预编译

(1)函数声明整体提升

(2)变量声明提示

imply global 

如果一个变量未经定义就赋值了,就归window所有了

一切声明的全局变量,都是window的属性

window就是全局的域

var a=1;

var b=2;

var c =3;

window {

  a:1,

  b:2,

  c:3

}
复制代码

预编译发生在函数执行的前一刻

预编译过程:

首选创建一个AO对象,比如:AO{};

第二部:把形参和变量声明当做AO对象的属性 并赋值undefind

第三部:并把实参值和形参赋值相统一

第四部:在函数体内找函数体,赋值给函数变量

第五步:开始执行

functoin test(){

 console.log(a);

  var b = 1234;

      a = 123;

  function a(){};

  var a;

  b = 123445;

  var b= function (){}

console.log(a);

}

test(1);
复制代码

注意解题四部曲

预编译: AO{

   a: undefined;

   a : undefined;

};

 AO{

 a:1;

 b:undefined;

}

第四部:AO{

   找函数体赋值

}

6, Arguments

  • arguments对象的长度等于传递给函数的参数的数量。
  • arguments对象是类似数组的对象,但不是JavaScript数组。
  • 你不能对arguments对象使用其他JavaScript数组方法,例如push,pop,slice等等。
  • JavaScript arguments对象索引从零开始。所以第一个参数将被arguments[0]引用,第二个参数将被arguments[1]引用

对象转换成数组

ES5: Array.prototype.slice.call(arguments)

ES6: Array.tofrom(arguments)
复制代码
文章分类
前端
文章标签