●、基本知识
○、完整的JS组成:
1、核心(ES)
2、文档对象模型(Document Object Model) - DOM
3、浏览器对象模型(Browser Object Model) - BOM
允许让 JS 与 浏览器进行交互
○、JS中window与global是什么关系
1、global 变量本身不可直接访问,可通过创建属性来指向其本身(间接访问);
也就是 window,其引用了 global,所以访问 window 即是访问 global。
2、在全局上下文里面,也可以用 this 访问 global,所以在全局上下文里面。
3、Math 等可看作global 的属性,global 的属性的访问往往省略掉前缀,
比如:Math.abs(1) === [[global]].Math.abs(1)
注:JavaScript运行需要JavaScript解释器,解释器运行的时候,会创建一个全局对象window
○、escape,encodeURI,encodeURIComponent有什么区别?
转载文档
这几个方法都可以对字符串进行编码和解码,都能解决 html 之间URL传输参数引起的中文乱码问题,那它们有什么区别吗?
编码字符对照表
名称 | 不编码字符 | 备注 |
---|---|---|
escape | - ASCII 字母和数字 - -_.!~*’() |
ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。 |
encodeURI |
- ASCII 字母和数字 - -_.!~*’() - ;/?:@&=+$,# |
encodeURI() 函数是不会进行转义的:;/?:@&=+$,# |
encodeURIComponent | - ASCII 字母和数字 - -_.!~*’() |
decodeURIComponent会转义 ;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号 |
有编码就有解码
编码 | 解码 |
---|---|
escape | unescape |
encodeURI | decodeURI |
encodeURIComponent | decodeURIComponent |
○、NaN == NaN 的结果是啥?为什么?
结果
- NaN == NaN 执行结果是 false。
- NaN虽然表示是一个非数字,但是一般是算术运算执行的结果,因此 NaN 仍然是 数值类型。
- 可以理解为一个随机正无穷大随机数。
NaN == NaN // false typeof NaN // “number”
原因
JavaScript的规定, NaN表示的是非数字, 那么这个非数字可以是不同的数字,因此 NaN 不等于 NaN。
注:两个NaN永远不可能相等
○、window.confirm()
文档
confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框。
特点
- 如果用户点击确定按钮,则 confirm() 返回 true。如果点击取消按钮,则 confirm() 返回 false。
- 在调用 confirm() 时,将暂停对 JavaScript 代码的执行,在用户作出响应之前,不会执行下一条语句。
- 在用户点击确定按钮或取消按钮把对话框关闭之前,它将阻止用户对浏览器的所有输入。
var rs=window.confirm("您是否要删除指定记录");
if (!rs) {return;}
//...
○、oninput、onchange与onpropertychange事件区别
事件名称 | 描述 |
---|---|
oninput |
1. 在value改变时触发,实时的,即每添加或删除一个字符就会触发; 1. 通过js改变value时。却不会触发; 1. 从浏览器的自己主动下拉提示中选取时,不会触发。 |
onchange | onchange事件在内容改变(两次内容有可能还是相等的)且失去焦点时触发; |
onpropertychange |
1. onpropertychange事件却是实时触发,即每添加或删除一个字符就会触发 1. 通过js改变也会触发该事件。可是该事件IE专有。 1. 当input设置为disable=true后。onpropertychange不会触发。 |
●、UTILS
○、动态插入script,并在加载完成后执行callback
○、js区分苹果手机,安卓手机和windows手机
○、JS中 关于 with
○、console对象
●、文档地址
○、async 函数
○、JavaScript 对象
String
- String.prototype.startsWith()
-
Object
- Object.getOwnPropertyNames()
- Object.defineProperty()、Object.hasOwnProperty()、Object.getOwnPropertyNames(obj)、
Date
○、码点相关
'\z' === 'z' // true 普通文本
'\172' === 'z' // true ASCII
'\x7A' === 'z' // true 16进制
'\u007A' === 'z' // true Unicode
'\u{7A}' === 'z' // true es6Unicode