• JS基础知识题(上)数据类型、原型、继承


    JS中使用typeof能够得到的哪些类型?

    undefined、string、number、boolean、object、function
    注意:js中对函数使用typeof返回的是function

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

    何时使用 === ?何时使用 == ?

    因为JS的 == 存在强制类型转换,所有 == 慎用!!大部分推荐使用 === !!
    除极个别情况,如:

    if(obj.a == null){
      // 这里相当于 obj.a === null ||obj.a === undefined,简写形式
      // 这是jquery源码中推荐的写法
    }
    

    JS中有哪些内置函数?

    Object、Array、Boolean、Number、String、Function、Date、RegExp、Error

    JS变量按照存储方式分为哪些类型?并描述其特点

    值类型:值复制的是真正的值
    引用类型:值复制的并不是一个真正的拷贝,而是拷贝其内存地址(指针)

    如何理解JSON?

    JSON 只是JavaScript的一个内置对象,和 Math 类似(注意:并不是内置函数),其有两个方法,如下:

    JSON.stringify({ a: 10, b: 20 }) // 解析JSON字符串并返回对应的值
    JSON.parse('{"a":10,"b":20}') // 返回与指定值对应的JSON字符串
    

    如何判断一个变量是数组类型?

    使用 instanceof 运算符可以用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上(即可以判断一个引用类型属于那种构造函数的实例)

    var arr = []
    console.log(arr instanceof Array) // true
    

    写一个原型链继承的例子

    封装了一个DOM操作的构造函数,类似Jquery中的$("节点"),可以执行链式操作

    cript>
    // 封装DOM查询
    function Elem(id) {
      this.elem = document.getElementById(id)
    
      // 操作元素节点的innerHTML
      Elem.prototype.html = function (val) {
        var elem = this.elem
        if (val) {
          elem.innerHTML = val // 修改内容
          return this // 用于链式操作
        } else {
          return elem.innerHTML // 返回内容
        }
      }
    
      // 给元素节点绑定事件
      Elem.prototype.on = function (type, fn) {
        var elem = this.elem
        elem.addEventListener(type, fn)
        return this // 用于链式操作
      }
    }
    
    var div1 = new Elem('div1')
    console.log(div1.html()) // 我是原版内容
    // 链式操作
    div1
      .html('我是修改后的内容')
      .on('click', function () {
        alert('我被点击了')
      })
      .html('<h1>我是链式操作修改的内容</h1>')
    

    描述 new 一个对象的过程

    1.先创建一个空对象
    2.修改该对象的 proto 指向构造函数的 prototype
    3.借用(apply)构造函数给该对象设置属性
    4.返回该对象

    // 创建一个new对象工厂
    var objectFactory = function (Con, ...args) {
      // 1.从Object.prototype上克隆一个空的对象
      var obj = new Object()
      // 2.取得外部传入的构造器
      Constructor = [].shift.call(arguments)
      // 3.修改obj的对象原型(关键!!!!!)
      obj.__proto__ = Constructor.prototype
      // 4.给obj设置属性(关键!!!!!)
      var ret = Constructor.apply(obj, arguments)
      // 5.确保返回的是一个对象
      return typeof ret === 'Object' ? ret : obj
    }
    
  • 相关阅读:
    吴恩达机器学习笔记——梯度下降算法(2)
    吴恩达机器学习笔记——梯度下降算法(1)
    Java面向对象
    实体框架
    Android Studio 3.4.1中使用com.android.support.v4.view.ViewPager提示不存在该类或程序闪退
    7、认识 Android Service
    安卓付费课程
    在Android Studio中如何添加GSON
    android studio 添加Volley
    android studio里面怎么看file explorer啊?
  • 原文地址:https://www.cnblogs.com/cqkjxxxx/p/13334930.html
Copyright © 2020-2023  润新知