null和undefined的区别

小米

  • undefined表示不存在的值,null表示空引用或者空对象;
  • undefined转为数字类型为NaN,null转为数字类型为0; ```javascript typeof undefined // undefined typeof null // object

null === undefined // false null == undefined // true

Number(undefined) // NaN Number(null) // 0

  1. - undefined是定义了未赋值,null是定义了且赋值为null
  2. - 设置为null的变量或者对象会被内存收集器回收,通过分配null可以手动释放对象;
  3. <a name="iiXbj"></a>
  4. #### [] == null?
  5. 小米
  6. <a name="HAgLH"></a>
  7. #### null == undefined?
  8. 小米
  9. <a name="nEKjv"></a>
  10. ### ==和===的区别
  11. <a name="MQRb5"></a>
  12. #### Object.is和===的区别?
  13. <a name="HJLDw"></a>
  14. ### [] == ![]结果是什么?为什么?
  15. <a name="EZqtH"></a>
  16. ### typeof和instanceof的区别?手写instanceof?
  17. 小米
  18. <a name="dxiZL"></a>
  19. ### 作用域类型
  20. 小米
  21. <a name="Grnjk"></a>
  22. ### 为什么0.1+0.2!==0.3
  23. <a name="Oml2U"></a>
  24. ### 原型链
  25. 快手创新业务小米
  26. <a name="H6XTv"></a>
  27. ### 说说JS的数据类型
  28. 小米<br />ES7 BigInt
  29. <a name="OmQY3"></a>
  30. #### JS原始数据类型有哪些?引用数据类型有哪些?
  31. <a name="ngw3I"></a>
  32. #### 判断数据类型的方法、缺点
  33. 快手创新业务小米
  34. <a name="Hedm8"></a>
  35. #### 判断数组的方式
  36. 小米<br />五种,1. typeof 2. constructor 3. instanceof 4. Object.prototype.toString.call 5. Array.isArray),然后说说 3. 4. 5. 方式的区别,顺便手写了 instanceof [ 省的讲一遍原型原型链了——从构造函数到寄生式继承 ]
  37. <a name="Lms4t"></a>
  38. ### 什么是BigInt? 为什么需要BigInt?
  39. <a name="aS4yu"></a>
  40. #### 如何创建并使用BigInt?
  41. <a name="FOfa6"></a>
  42. ### Object的toString和构造器的toString有什么区别?
  43. 快手创新业务
  44. <a name="WwRu6"></a>
  45. ### this指向问题
  46. 快手创新业务
  47. <a name="bZ0Ju"></a>
  48. ### 了解闭包吗?
  49. 小米
  50. <a name="TrBQ6"></a>
  51. #### 闭包产生的原因?
  52. <a name="aqe9M"></a>
  53. #### 闭包有哪些表现形式?
  54. <a name="TGDNd"></a>
  55. #### 闭包中的this指向
  56. 小米
  57. <a name="rjH3X"></a>
  58. ###
  59. <a name="oG4tQ"></a>
  60. ### 箭头函数和普通函数的区别
  61. 快手创新业务小米
  62. <a name="Sv71x"></a>
  63. ### Set、Map、WeakMap、WeakSet 区别
  64. 小米<br />Map Object 的效率问题,各自的 APIWeakMap WeakSet 可迭代吗,JS 垃圾回收机制对 WeakMap WeakSet 的影响
  65. <a name="NQjMF"></a>
  66. ### 原型对象和构造函数有何关系?
  67. <a name="wVN9d"></a>
  68. #### 原型、构造函数、实例
  69. 1. 构造函数
  70. > 用来初始化新创建对象的函数是构造函数
  71. ```javascript
  72. function Foo() {
  73. ...
  74. }

每一个构造函数都有一个原型对象即:prototype(指针)指向的对象。而原型对象也有一个属性constructor(构造器)指向构造函数。

  1. 实例对象

    通过构造函数的new操作创建的对象是实例对象。可以用一个构造函数构造多个实例对象。

  1. const f1 = new Foo();
  2. const f2 = new Foo();

实例对象也有一个proto(非标准顺序)属性。该属性指向实例对象的原型对象。

  1. 原型

能不能描述一下原型链?

JS如何实现继承?

函数的arguments为什么不是数组?如何转化成数组?

因为arguments本身并不能调用数组方法,它是一个另外一种对象类型,只不过属性从0开始排,依次为0,1,2…最后还有 callee 和length属性,我们也把这样的对象称为类数组。
常见的类数组还有:
1. 用getElementsByTagName/ClassName()获得的HTMLCollection;
2. 用querySelector获得的nodeList。

那这导致很多数组的方法就不能用了,必要时需要我们将它们转换成数组,有哪些方法呢?
Array.prototype.slice.call()

  1. function sum(a, b) {
  2. // 将类数组转换为数组
  3. let args = Array.prototype.slice.call(arguments);
  4. // 对转换为数组的方法调用累加
  5. let num = args.reduce((sum,cur) =>{
  6. return sum+cur;
  7. })
  8. console.log(num);
  9. };
  10. sum(1,2,3,4,5,6);
  11. // 21

Array.from()

  1. function sum(a, b) {
  2. // 将类数组转换为数组
  3. let args=Array.from(arguments)
  4. // 对转换为数组的方法调用累加
  5. let num = args.reduce((sum,cur) =>{
  6. return sum+cur;
  7. })
  8. console.log(num);
  9. };
  10. sum(1,2,3,4,5,6);
  11. // 21

这种方法也可以用来转换Set和Map哦!

ES6展开运算符

  1. function sum(a, b) {
  2. // 将类数组转换为数组
  3. let args= [...arguments];
  4. // 对转换为数组的方法调用累加
  5. let num = args.reduce((sum,cur) =>{
  6. return sum+cur;
  7. })
  8. console.log(num);
  9. };
  10. sum(1,2,3,4,5,6);
  11. // 21

利用concat+apply

  1. function sum(a, b) {
  2. // 将类数组转换为数组
  3. // apply方法会把第二个参数展开
  4. let args=Array.prototype.concat.apply([], arguments);
  5. // 对转换为数组的方法调用累加
  6. let num = args.reduce((sum,cur) =>{
  7. return sum+cur;
  8. })
  9. console.log(num);
  10. };
  11. sum(1,2,3,4,5,6);
  12. // 21

当然,最原始的方法就是再创建一个数组,用for循环把类数组的每个属性值放在里面,过于简单,就不浪费篇幅了。

forEach中return有效果吗?如何中断forEach循环?

能不能实现数组map方法 ?

能不能实现数组reduce方法 ?

能不能写一个完整的深拷贝?

V8 引擎如何进行垃圾内存的回收?

描述一下 V8 执行一段JS代码的过程?

宏任务(MacroTask)引入

nodejs 和 浏览器关于eventLoop的主要区别

nodejs中的异步、非阻塞I/O是如何实现的?

JS异步编程有哪些方案?为什么会出现这些方案?

能不能简单实现一下 node 中回调函数的机制?

Promise 凭借什么消灭了回调地狱?

Promise 如何实现链式调用?

现Promise的 all 和 race

解释一下async/await的运行机制