js知识储备

104 阅读5分钟
  1. 目前世界上使用最广泛的 JS 版本(IE 6 支持的版本)是
  • 第三版
  1.  一般来说,要把程序加载到内存才能运行

  2.  双击 Chrome 快捷方式,会启动一个 Chrome 进程,这个进程会启动其他子进程

  3.  线程不是进程,线程是一种比进程更轻量的概念

  4.  JS 只能单线程执行

  5. JS 引擎的功能有

  • 编译 JS 代码为字节码或者机器码
  • 优化字节码或者机器码
  • 执行字节码或者机器码
  • 垃圾回收
  1. 内存中,Stack 和 Heap 的区别是
  • Stack 必须顺序存储数据,让数据一个接一个排列
  • Heap 随机存储数据
  1. Object 和 object 的区别是什么?
  • Object 是一个全局函数,可以用来生成对象,var obj = new Object() ,可以简写成 var obj = {};而 object 什么也不是,除非我声明一个 var object
  1. 关于原型(共有属性)
  • Object.prototype 保存了一个对象的地址,这个对象包含了所有普通对象的共有属性,叫做对象的原型
  • Array.prototype 保存了一个对象的地址,这个对象包含了是所有数组的共有属性,叫做数组的原型
  • Function.prototype 保存了一个对象的地址,这个对象包含了是所有函数的共有属性,叫做函数的原型
  • 每个对象都有一个隐藏属性,用来保存其原型的地址,这个隐藏属性的名字叫做 proto

image.png 10. 关于「原型」

  • x 的原型」等价于「x.proto 所指的对象」 ,有时为了方便,我们可以认为「x 的原型」等价于「x.proto
  • 一个对象的原型指的是这个对象与其他同类对象的公有属性的集合,比如 obj1 和 ob2 同时拥有 toString / valueOf,那么 toString / valueOf 等属性组成的对象,就是 obj1 和 obj2 的原型,这个原型的地址一般储存在构造函数的 prototype 里
  • x.__proto__和 Object.prototype 存储着同一个对象的地址,这个对象就是 x 的原型
  • 每个对象都有原型,但除了「根对象 Object.prototype」比较特殊,Object.prototype 这个对象的原型为空 null
  1. JS 7大数据类型的有
  • undefined
  • null
  • bool
  • string
  • object
  • symbol
  • number
  1. 关于 UTF-8 和 Unicod
  • UTF-8 是 Unicode 一种存储规则,也叫字符编码规则。
  1. js 的number
  • JS 的 number 全都是以小数(浮点数)的形式存储的,没有单独的整数
  1. 字符串 \n\t\r 的长度是 3
  2. 1 && 2 的值是 2;0 && 2 的值是 0
  • 只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
  • 只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值; 参考链接JavaScript中alert(1&&2)为2的原因_qingliuFu的博客-CSDN博客
    16。 五个 falsy 值是
  • 0
  • NaN
  • undefined
  • null
  • ''
  1. 如何将一个数字 n,转为一个字符串
  • String(n)
  • n + ''
  • '' + n
  1. JS 构造对象目前有两种方式,一种是用构造函数+prototype,一种是用 class
  • 两者方式 JS 都支持,JS 是一门包容的语言,提供了多种表达形式,两者方式都能表达程序员的思想。
  • 构造函数+prototype 是先提供的,class 是后提供的,说明 构造函数+prototype 是 JS
  1. 关于 prototype 属性
  • 所有函数一出生就有一个 prototype 属性(除了箭头函数)
  • 所有 prototype 一出生就有一个 constructor 属性
  • 所有 constructor 属性一出生就保存了对应的函数的地址
  • 如果一个函数不是构造函数,它依然拥有 prototype 属性,只不过这个属性暂时没什么用
  • 如果一个对象不是函数,那么这个对象一般来说没有 prototype 属性,但这个对象一般一定会有 proto 属性
  1. new X() 操作其实自动帮我们做了很多事情\
  • 自动创建一个空对象
  • 自动将该空对象的原型指向 X.prototype(即将 X.prototype 保存的地址复制到空对象.proto 里)
  • 自动将空对象作为 this 来运行构造函数
  • 自动 return this
  1. 类型 和 类 的描述
  • 类型是对 JS 中数据的分类
  • 类是对 JS 中对象的分类
  • JS 中的类型有:数字、字符串、布尔、符号Symbol、null、undefined、对象
  • JS 中的类有:对象 Object、数组 Array、函数 Function 等
  1. 关于 Object.prototype的描述
  • Object.prototye 是「Object 构造出来的对象 obj」的原型,即 obj.proto === Object.prototype
  • Object.proto 是 Object 的原型,由于 Object 是函数,而所有函数的原型都是 Function.prototype,所以 Object.proto === Function.prototype
  • Object.prototye 不是 Object 的原型,Object.proto 才是 Object 的原型(还记着之前答过「x.原型 等价于 x.proto」吗,现在只不过是把 x 替换成 Object。很多人都搞不清楚 Object.proto 和 Object.prototype 哪一个才是 Object 的原型,其实只要记住公式就好办了)
  1. 所有「函数对象」的「构造函数」都是 Function
  2. function fn(){}请问 fn 是由谁构造的---Function 25.关于调用栈的描述
  • JS 引擎进入一个函数之前,需要把当时的环境保存进调用栈
  • JS 引擎退出一个函数之前,需要把环境从调用栈里弹出,然后回到这个弹出的环境
  • 调用栈的长度是有限的 26.关于 arguments的描述
  • 每次调用函数时,都会对应产生一个 arguments
  • arguments 是一个包含所有普通参数的伪数组
  • 我们应该尽量不对 arguments 内的元素进行修改,修改 arguments 会让代码变得令人疑惑
  1. 关于 this的描述
  • 在 new fn() 调用中,fn 里的 this 指向新生成的对象,这是 new 决定的
  • 在 fn() 调用中, this 默认指向 window,这是浏览器决定的
  • 在 obj.fn() 调用中, this 默认指向 obj,这是 JS 的隐式传 this
  • 在 fn.call(xxx) 调用中,this 就是 xxx,这是开发者通过 call 显式指定的 this
  • 在 arrow() 调用中,arrow 里面的 this 就是 arrow 外面的 this,因为箭头函数里面没有自己的 this
  • 在 arrow.call(xxx) 调用中,arrow 里面的 this 还是 arrow 外面的 this,因为箭头函数里面没有自己的 this