zoukankan      html  css  js  c++  java
  • JS基础知识(未完)

    学习笔记,知识点来源于掘金小册-yck-前端面试之道

    1.原始类型(6种)

    原始类型储存的都是值

    number

    boolean

    string

    null

    undefined

    symbol

    null不是对象类型。虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是这个 Bug 却一直流传下来。

    2.对象类型

    对象类型储存的是地址;当创建一个对象类型的时候,计算机会在内存中帮我们开辟一个空间来存放值,对象类型储存的就是这个空间的地址

    const a = [];
    /*
    对于常量 a 来说,假设内存地址为 #001,那么在地址 #001 的位置存放了值 [],常量 a 存放了地址 #001
    */
    const b = a;
    //b存放的也是地址#001,a,b指向同一片内存,互相影响

    函数参数是对象会发生什么问题?

    function test(person) { // person参数是p1的副本,和p1指向同一内存
      person.age = 26  //这里修改person,p1也变了
      person = {       // 这里给person一个新地址,person与p1没关系了
        name: 'yyy',
        age: 30
      }
    
      return person
    }
    const p1 = {
      name: 'yck',
      age: 25
    }
    const p2 = test(p1)
    console.log(p1) // {name:'yck',age:26}
    console.log(p2) // {name:'yyy',age:30}

     3.typeof vs instanceof

    3.1typeof能否正确判断数据类型?

    typeof 1 // 'number'
    typeof '1' // 'string'
    typeof undefined // 'undefined'
    typeof true // 'boolean'
    typeof Symbol() // 'symbol'
    typeof null // object
    typeof [] // 'object'
    typeof {} // 'object'
    typeof console.log // 'function'

    对于原始类型来说,除了typeof null,其他都能正确判断

    对于对象类型来说,除了函数,其他都会显示object

    所以typeof不能正确判断数据类型

    3.2 instanceof 能正确判断对象的原理是什么?

    原型链

    const Person = function() {}
    const p1 = new Person()
    p1 instanceof Person // true
    
    var str = 'hello world' // 原始类型
    str instanceof String // false
    
    var str1 = new String('hello world') // 经过了原型链,对象类型
    str1 instanceof String // true 

    4.类型转换

    js中类型转换只有三种情况:

    转成布尔值

    转成数字

    转成字符串

    5.this指向

    function foo() {
      console.log(this.a)
    }
    let a = 1
    foo()  // 1.指向window
    
    const obj = {
      a: 2,
      foo: foo
    }
    obj.foo()  // 2.指向调用者
    
    const c = new foo()  // 3. this指向c,不会被任何其他方式改变

    箭头函数的this指向函数定义时的环境(或者说箭头函数没有this,取决于包裹箭头函数的第一个普通函数的this)

     call,apply是立即调用;bind是绑定,并不会立刻执行,只会返回一个新函数,用于稍后调用

  • 相关阅读:
    Python: 什么是*args和**kwargs
    python实现获取电脑IP、主机名、Mac地址
    python操作oracle完整教程
    python连接oracle数据库报错"DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "解决方案
    ORACLE_BASE、ORACLE_HOME有什么区别
    Java的JAVA_HOME、Path、CLASSPATH环境变量小结,可以借助这三个的配置去理解Oracle中的那几个环境变量的配置作用
    python连接Oracle的方式以及过程中遇到的问题
    hadoop学习笔记(六):hadoop全分布式集群的环境搭建
    CentOS7安装jdk教程
    在线用户列表
  • 原文地址:https://www.cnblogs.com/dll-ft/p/10179220.html
Copyright © 2011-2022 走看看