zoukankan      html  css  js  c++  java
  • JavaScript基础应用

    1.实现字符串的反向输出

        var s="abc"

        s.split('').reverse().join('')​  -----> "cab"

        知识点: String  split()--> Array  reverse() && join() --> String

    2.Call和Apply用法及区别

        都是实现将函数绑定到另一个对象上去执行,传参数列表类型不同。

        F.apply(thisArg, [argArray] )​​​

        thisArg​将代替F中的this对象,可以用来实现JS继承。

    var A = {
    
                content:1,
    
                getContent: function(){
    
                      console.log(this.content)
    
               }
    
    }
    
    A.getContent();  ==>1
    
    var B = A.getContent;
    
    B();   ===>undefined    //因为this ->B B没有content变量
    
    如何实现B()输出1?   B.apply(A,null);​//A将代替B中的this对象 this->A so 1

    3.注意this变量的指向

    function main(){
      
      a = 1;   var a = 2;   this.a = 3; }​
    main.a = 4;
    main.prototype.a = 5;
    var h = new main(); //当main被当成构造函数时,main()中的this指向新对象
    console.log(main.a); ===>4 //this指向window
    console.log(a); ===>3
    console.log(this.a); ===>3
    console.log(h.a); ===>3 //this指向h

    delete h.a;
    console.log(h.a); ===>5 //删掉对象属性后,会到原型里面去找

    this的工作原理:

    1.全局范围 this -->全局对象window

    2.函数调用 this -->全局对象

    3.方法调用 this -->当前调用对象

    4.new foo(); 调用构造函数,this指向新创建的对象

    5.call,apply this指向第一个参数对象

    函数声明与变量声明会被javascript引擎隐式提升到当前作用域的顶部,但是只提升名称,不会提升赋值部分。​

    4.局部变量和全局变量

      尽量使用局部变量,不用全局变量​

      (1)JS解析是从里到外,在效率上,局部变量会被优先访问到

      (2)​资源利用上来说,局部变量使用完成后会被释放,全局变量会耗费系统资源

      如果在函数外部需要访问局部变量,肿么办?

      这里就需要引入闭包。下面是一个简单的闭包例子:

    function A(){
    
         var a =1;
    
         var B = function(){
    
                return a++;
    
        }
    
        return B();
    
    }​​
    
    在函数外部:
    
    var c = A();     ===> 1   c的值就是局部变量a的值

    实现依次调用输出1,2,3...

      闭包的优劣:

      (1)定义内部变量,避免变量应用混论冲突

      (2)但是需要在内存中维持一个变量,不会被释放,GC不会主动回收,会一直占用内存,如需释放,需要手动置值为null​

    5.Array   的 sort方法使用 传入排序函数 参数是 Function

    var myArray = [1,'a', 'b', 3, 4, c];​   //实现数字前字母后的输出
    
    function compare(var1, var2){
    
        if(isNaN(val1)){
    
                 return 1;
    
        }else if(isNaN(val2)){
    
               return -1;
    
        }else{
    
               return 0;
    
       }
    
    }​
    
    myArray.sort(compare)​;  ===> [1, 3, 4, 'a', 'b', 'c']
    

    6.​js的基本数据类型和引用类型

      基本类型:Number, Boolean, Null, Undefined, String

      引用类型:Object, Function, Array, Date

      js中的比较 用“===”

        (1)Number 与String比较,String会转为Number

        (2)Boolean与其他任何类型比较,​Boolean都会转为Number

        (3)Number/String与Object比较,都会转为Object类型

      其他类型转为Boolean类型的规则:

        1.undefined,null    -> false

        2.Boolean   只能作为布尔值

        3.Number     0/NaN -> false,其他true

        4.String      ''->false,其他true

        5.Object   ->true​

    7.hasOwnProperty函数

    这是唯一一个处理属性不查找原型链的函数,可以用来判断一个对象是否包含自定义属性而不是原型链上的属性

    for(var i in foo){
      if(foo.hasOwnProperty(i)){ //过滤掉那些非定义属性
       console.log(i);    
      }  
    }
    

     将值置为undefined/null都不会删除属性 delete 会真正删除属性

  • 相关阅读:
    C89和C99区别--简单总结
    C语言 值传递和地址传递
    对于.h文件和.c文件
    C语言-------多文件编译
    数据结构之第二章线性表
    数据结构之第一章一些概念
    JS-prototype的掌握
    JS-return的使用
    分分钟搞懂JS-闭包函数
    JS-面向对象-封装
  • 原文地址:https://www.cnblogs.com/torri/p/6539367.html
Copyright © 2011-2022 走看看