wdnmd

js高程设计笔记

1.什么是javascript
 
2.HTML中的Javascript
的加载是阻塞的,页面阻塞,(包含下载时间)
script 带src 中间再写代码会不执行。
script最好放在body后面,避免空白时间过长。
 
3.语言基础
var变量提升
null值表示一个空指针对象,这也是给typeof传一个null会返回object的原因。
 
4.变量,作用域,内存
 
5.基本引用类型
引用类型与原始值包装类型的主要区别在于对象的生命周期。在通过new实例化引用类型后,得到的实例会在
离开作用域时被销毁,而自动创建的原始值包装对象则只存在访问它的那行代码执行期间。
eg
let s1 = "some text"
s1.color = " red"
console.log(s1.color) // undefined
 
let falseObject = new Boolean(false);
let result = falseObject && true;
console.log(result); //true
因为falseObject是一个对象,所以为true
 
6.集合引用类型
数组sort排序升降序的原理,??
底层很多实现方法,arr.sort(function(a,b){return a-b}) a-b
Map(), Map()可以用任何数据类型作为键
WeakMap(), 只能用object作键, 不会妨碍垃圾回收
WeakMap实例之所以限制只能用对象作为键,是为了保证只有通过键对象的引用才能取得值。如果引用原始
值,就没有办法分别初始化时使用的字符串字面量和初始化之后使用的一个相等的字符串了。
 
SameValueZero, ES标准中的相等比较算法,
eg,== ===/ Object.is()/ set=> has / includes()
扩展运算符,浅拷贝
 
7.迭代器与生成器
// number object无迭代器
// string array map set 有迭代器
迭代器维护着一个指向可迭代对象的引用,因此迭代器会阻止垃圾回收程序回收可迭代对象。
 
8.对象、类、与面向对象编程
内部属性, 数据属性, 访问器属性。
数据属性
[[Configurable]] 是否可以delete
[[Enumberable]] 是否可以for-in
[[Writable]] 是否可以修改
[[Value]] 值
访问器属性
[[Configurable]] 是否可以delete
[[Enumberable]] 是否可以for-in
[[Get]] 读操作时候调用
[[Set]] 写操作时候调用
null undefined不能解构
 
new一个实例,执行的操作
1.在内存中创建一个新对象
2.这个新对象内部的[[Prototype]]特性被赋值为构造函数的prototype属性。
3.构造函数内部的this被赋值为这个新对象
4.执行构造函数内部的代码(给新对象添加属性)
5.如果构造函数返回非空对象, 则返回该对象; 否则, 返回刚创建的对象
 
原型模式的问题,当原型中拥有引用值属性的时候,修改一个其他的跟着改。
 
继承
1.原型链继承的问题,引用值问题,子类型实例化的时候不能给父类型的构造函数穿参。
 
类构造函数,一定得用new
 
9.代理与反射
 
10.函数
函数对象是对象, 函数名是指针
箭头函数不能使用arguments、super、new.target,也不能用作构造函数, 没有prototype属性。
箭头函数的this会保留定义该函数时的上下文。
 
函数声明,函数表达式的区别。
函数声明会提升,在执行代码时,js引擎会先执行一遍扫描,把发现的函数声明提升到源代码的顶部。
call, apply,(this, arg),区别,apply传数组, call一个一个的传
 
window.identity = "the window";
let object1 = {
identity: "my obj",
getIdentity() {
return function () {
return this.identity;
};
},
};
console.log(object1.getIdentity()()); //the window
 
内部函数永远不可能直接访问外部函数的this, arguments这两个变量。
如果想访问包含作用域中的arg, 需要将其引用先保存到闭包能访问到的另一个变量中。
 
11.期约与异步函数
promise.prototype.catch(),语法糖, = Promise.prototype.then(null, onRejected)
 
12.BOM
hash,会在浏览器历史记录中增加一条新纪录。
replace,重载后不会增加历史记录。
 
13.客户端检测
能力检测,用户代理检测 navigator.userAgent
 
14.DOM
NodeList, 类数组对象,有push, splice, length 但没有所有数组的方法, 如sort slice
 
23.JSON
json stringfy,parse后的对象与原对象有什么区别
所有函数和原型成员会省略,undefined的属性也会跳过。
 
28.最佳实践
应该把应用程序逻辑跟事件处理程序分离
比如按键操作,这样就能区分是按键错误,还是操作错误,且易扩展
 
全局作用域查找很慢,避免对全局作用域的查找
posted @ 2022-01-24 16:40  FreshChick  阅读(29)  评论(0编辑  收藏  举报