为了账号安全,请及时绑定邮箱和手机立即绑定

直面JavaScript中的30个疑难杂症

公明2020 Web前端工程师
难度中级
时长 5小时 3分
学习人数
综合评分9.60
17人评价 查看评价
9.6 内容实用
9.8 简洁易懂
9.4 逻辑清晰
  •  

    1.关于typeof null,机器码后三位000(与对象完全一样)

    2. typeof function 为什么是function而不是object,在于是否存在call方法

    查看全部
  • // 什么是栈:计算机为原始类型开辟的一块内存空间 string number ...

    // 什么是堆:计算机为引用类型开辟的一块内存空间 object

    var a = 'MOOC';

    var b = a;

    console.log(a, b); // MOOC MOOC2


    var c = {key: 1};

    var d = c;

    d.key = 2;

    console.log(c, d); // 2, 2


    // ['MOOC', 'MOOC2']

    // c d ['x00000018', 'x00000018'] -> { {key: 1} }

    // c d x00000018 -> {key: 2}

    查看全部
  • // instanceof 检测 bool: true false

    // A instanceof B

    console.log([] instanceof  Array); // true

    console.log({} instanceof  Object); // true

    console.log(new Date instanceof  Date); // true

    function Person(){};

    console.log(new Person() instanceof  Person); // true


    console.log([] instanceof  Object); // true

    console.log(new Date instanceof  Object); // true

    console.log(new Person() instanceof  Object); // true

    // instanceof 原型链 A instanceof B true, B instanceof C true

    // 儿子 爸爸 爷爷


    if(typeof(val) !== undefined) {}


    console.log(Object.prototype.toString.call('1')); // string

    console.log(Object.prototype.toString.call([])); // Array

    查看全部
  • // typeof 检测 返回的是对应的数据类型

    console.log(typeof(123)); // number

    console.log(typeof(true)); // boolean

    console.log(typeof('MOOC')); // string

    console.log(typeof(undefined)); // undefined


    console.log(typeof(null)); // object 为什么不null

    // 计算机typeof 返回的数据类型 机器码 01011: 000 => object

    // null 000000...000 => object

    // js bug 


    console.log(typeof([])); // object  // 引用

    console.log(typeof(new Date())); // object

    console.log(typeof({})); // object


    console.log(typeof(function(){})); // function

    console.log(typeof(Array)); // function 为什么不是object

    // typeof 引用类型 object: object function

    // object 定义一个[[call]] 如果已经定义了call方法就是 function 不是 object


    var str = 'MOOC';

    console.log(typeof(str)); // string


    var str1 = new String('MOOC'); // 实例化后的对象

    console.log(str1); // {} key : value 0:M 1:O ....

    console.log(typeof(str1)); // object

    查看全部
  • http://img1.sycdn.imooc.com//627885060001b8ee07000062.jpg

    浅拷贝两种方式:遍历 和 Object.create()

    查看全部
  • 6252cdff0001f35a09600540.jpg^qUxJg$c43abd01a5fabbba66466a22476d2957b84506584
    查看全部
  • console.log(Object.prototype.toString.call('1')
    console.log(Object.prototype.toString.call('[]')
    查看全部
  • todo 没看懂

    查看全部
  • 包装对象:String Number Boolean

    查看全部
  • JS中this的用法


    1. 代指当前调用这个对象

    2. 4中绑定规则:默认绑定、隐式绑定、显示绑定、new绑定。优先级从低到高。

    3. 改变this指向:call  apply  bind

    4. 手写一个bind方法


    查看全部
  • js中New的执行过程有哪几步


    • 实例化对象

    共4步骤:

    1. 创建一个新的对象obj:var obj = new Object()

    2. 把obj的proto指向构造函数的prototype对象 实现继承:obj.__proto__ = Fn.prototype

    3. 将步骤1新创建的对象obj作为this的上下文:var result = Fn.call(obj)

    4. 返回创建的对象obj(如果该函数没有返回对象,则返回this)

      if( typeof result === 'object' ){

          return result  //func = result

      }else{

          return obj    //func = obj

      }

    查看全部
  • function对象call、apply、bind

        Function.apply ( obj, args )//args为数组

        Function.call ( obj, args )//args为单个参数

    一、apply方法

    1. apply()方法调用一个函数,其具有一个指定的this值,以及作为一个数组(或类数组对象)提供的参数。

    2. apply方法能劫持另一个对象的方法,继承另外一个对象的属性

    3. function.apply(obj, args)方法能接受两个参数

    4. obj:这个对象将代替function类里this对象

    5. args:这个是数组,他将作为参数传给funcrion(args--->arguments)

    二、call方法

    1. call方法与apply作用相同,唯一区别是第二个args参数

    2. call:单个参数传入,apply:以数组形式传入


    三、bind方法

    1. bind:类似于call 但是与其不用的是call调用之后可以立即执行,但是bind需要用一个变量进行接收之后再执行。

    查看全部
  • js中闭包的概念:

    1. 是引用了自由变量的函数这个被引用的自由变量将和这个函数一同存在,即使已经离开了,创造它的环境也不例外。

    2. 另一种说法认为闭包是由函数和其相关的引用环境组合而成,实现信息的驻留(信息的保持,引用在空间不销毁)。

    ++的解释:加号在前取新值,加号在后取旧值


    可以使用立即执行函数来实现闭包

    闭包的缺点:闭包导致内存会驻留,如果是大量对象的闭包环境会造成内存泄漏

    查看全部
  • js重载的概念

    • 在程序中可以定义相同名字,不同参数的形式的不同函数。

    • 函数在调用的函数的时候,自动识别不同参数对应的函数,实现了相同函数名不同的函数调用

    • javascript本身没有重载的,但是可以通过arguments来实现函数重载


    查看全部
  •     http://img1.sycdn.imooc.com//6215d1f90001baf107760320.jpg原型链

    查看全部

举报

0/150
提交
取消
课程须知
1、有一定的前端JavaScript基础的用户 2、想对JavaScript有更深层次的了解,或者是对常见JavaScript面试题难以理解的用户 3、技术储备:JavaScript、HTML、CSS
老师告诉你能学到什么?
JavaScript中比较重要的知识点,例如数据类型检测;面试中常见的闭包、作用域和作用域链、执行上下文等等;还有JavaScript中的原型、原型链,面向对象问题,以及实战开发的运用。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!