0
点赞
收藏
分享

微信扫一扫

js高级知识

洛茄 2023-05-22 阅读 106

js数据类型:

1、基本(值)类型:

      String:任意字符串

      Number:任意数值

      boolean: True False

     undefined:  undefined  

     null: null

      undefined 和null 区别: undefined 定义了变量未赋值 null定义了变量并赋值为null 

      var a; typeof a 是'undefined'

      a=null typeof a 是 ‘object' 

      什么时候用null:

      var c=null  初始赋值为null,表明将要赋值为对象  

      c=[1,4,334]

      c=null 最后将赋值为null 等待垃圾回收器进行回收释放内存

2、 对象(引用)类型 :

      Object: 任意对象

      Function: 一种特殊对象(可以执行)

      Array: 一种特殊对象(数值下标,有序的)

数据类型判断:

typeof: 返回的结果是变量的数据类型字符串('undefined' 'string' 'number' 'object' 'boolean' 'function')
      instanceof: 用于对象类型 判断对象具体类型
      ===: undefined null
       var a ;
        console.log(a, typeof a, a === undefined, typeof a === 'undefined') // undefined  'undefined'  true  true
        a=4
         console.log( typeof a === 'number') //true
    a='www'
     console.log( typeof a === 'string') //true         
          a=null
     console.log( typeof a, a===null) //'object' true
          var b1= {
             b2: [1,'abc',console.log],
              b3: function() {
       console.log('b3')
                  }
           }
    console.log(b1 instanceof Object, b1 instanceof Array) // true false
         console.log(b1.b2 instanceof Object, b1.b2 instanceof Array) // true false
         console.log(b1.b3 instanceof Object, b1.b3 instanceof Function) // true true

3、变量内存

var a=xxx //若xxx是基本类型 则a内存存储的是xxx值 若xxx是对象类型 则a内存存储的是对xxx堆内存地址
       var obj1= {name:'tom'}
       var obj2=obj1  //此时obj1 obj2同时指向堆内存同一个对象内存地址
        obj1.name ='jack'
       console.log(obj2.name) // jack
        obj2.age=22
        console.log(obj1.age) //22
        function fun1(obj) {
             obj.name='AAA'
        }
        fun1(obj1)
        console.log(obj2.name) // AAA

       在js调用函数时传递变量参数时,是值传递(基本类型是值  引用类型是对象内存地址值)

var a=3
       function fun(a){
           a=a+1
       }
       fun(a)//此时传的是变量a的值3
       console.log(a) //3
        var obj={name:'howhy'}
       function fun1(obj){
           console.log(obj.name) //howhy
      }
      fun1(obj) //此时传递的是obj的内存地址值

      局部变量函数执行完时释放 对象最后由垃圾回收器进行回收

4、函数

      函数定义有两种方法:1、 函数声明 function fun() {} 2、函数表达式 var fun1=function(){}

      函数执行:1、括号 2、Object.fun1() 3、函数名.call/apply(对象) 这样执行可以改变方法的this(也就是可以将这个方法添加到任意对象)       

var obj={}
      function test(){
         this.xxx='xxx111'
     }   
     test.call(obj)
     console.log(obj.xxx) //xxx111

    回调函数的特点:1、自定义的 2、 没有手动调用 3、它自己执行了  例如:dom事件  setTimeout 

IIFE: Immediately-Invoked  Function express  立即执行函数表达式  //隐藏实现 不会污染全局命名空间  编译js代码
     (function(){
          var a=1
          function test(){
              console.log(++a)
          }
         window.$=function(){
              return {test: test}
         }
     })()
      $().test() // 2

5、this : 1、任何函数的本质执行都是通过某个对象调用执行的,如果没有直接指定就是window 2、所有函数内部都有一个变量this 3、它的值就是调用函数的当前对象   

6、js语句是否加分号编码问题:js一条语句后可不加分号 下面两种情况需在语句前加分号:小括号或中括号开头的语句

      

var a=3
;(function(){
    console.log(11111111)
  })()
var b=4
;[1,3,4].forEach(function(){})

 7、原型链  1、每个函数(类)都有一个prototype属性,即显式原型(属性) 2、每个实例对象都有一个__proto__即隐式原型(属性)

                    3、对象实例的隐式原型的值为对象显式原型的值  new Date().__proto__===Date.prototype

                    对象属性查找:1先查找自身隐性原型 然后查找对象显式原型

                   4、函数的显式原型指向的对象默认是空Object的实例对象

                     console.log(fn.prototype instanceof Object) //true 

                     console.log(Object.prototype instanceof Object) //false

                     console.log(Function.prototype instanceof Object) //true 

                   5、所有函数都是Function的实例   console.log(Function.__proto__===Function.prototype)

                   6、 Object的原型对象是原型链的尽头 console.log(Object.__proto__.prototype) //null

 



举报

相关推荐

js高级-01

js高级-02

js高级(三)

JS高级部分

JS高级三

js高级语法

JS高级十

js高级-03

0 条评论