错误回收 try catch finally
错误回收机制是在编码运行过程中,在写js过程中肯定会遇到错误,但是呢这个错误有时并不是可控的,比如说当向服务端发送一个请求的时候,返回的内容如果要是服务端报错了,这些类似的情况,那么这些错误不可控。所以要用垃圾回收机制,写代码的并不知道会不会报错。
错误回收 try catch finally
在介绍错误回收之前,先介绍一下 Error 类
console.dir(Error)
new Error()
EvalError
InternalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
这些错误全部继承至Error
获取错误的字符串信息: (new EvalError('1111111')).stack / (new EvalError('1111111')).message
console.dir(new EvalError('1111111'))
了解了这些之后,我们就可以讲 try catch了
try catch 实际上就是 运行 try 里面的代码,如果报错了,则会将错误的字符串形式接收至catch中
举例
try{throw 1}catch (e){console.log(e)}
try{throw new TypeError('Cannot read properties of undefined (reading \'1\')')}catch (e){console.log(e)}
try{[][1][1]}catch (e){console.log(e)}
try{[][1][1]}catch (e){console.log(e)}finally{console.log('over')}
new.target 属性允许你检测函数或构造方法是否是通过new运算符被调用的
举例
Foo = function (){if(new.target){console.log('ohhhhh')}}
Foo();
new Foo();
Foo = function (){if(new.target){console.log(new)}}
Foo = function (){if(new.target){console.log(new.target)}}
new.target指向被new调用的构造函数,所以"new."成为了一个虚拟上下文。
Foo = function (){if(new.target){console.dir(new.target)}}
WebAPI
WebAPI实际上是我们整个逆向的角度来讲非常常用,杂,多,乱
WebAPI中每一个都各司其职,都有它的作用,也就是说这些东西的绝大部分在外部其他js非浏览器就是没有dom和bom节点的这些引擎里面是完全没有不存在的,如果说一段加密的js,要检测或者说利用它的特性的话,那么遇到一个就必须要处理一个,所以随着时间的推移,遇到的网站的增多,难度的增大,就会接触到一部分(作为反爬工作,这些是必不可少的)
1.
Location
它的大写标志并不实际上的大写
Location
接口表示其链接到的对象的位置(URL)。所做的修改反映在与之相关的对象上。 Document 和 Window 接口都有这样一个链接的 Location,分别通过 Document.location和Window.location 访问。
属性
Location
接口不继承任何属性,但是实现了那些来自 URLUtils
的属性。
包含整个 URL 的一个DOMString
包含 URL 对应协议的一个DOMString,最后有一个":"。
包含了域名的一个DOMString,可能在该串最后带有一个":"并跟上 URL 的端口号。
包含 URL 域名的一个DOMString。
包含端口号的一个DOMString。
包含 URL 中路径部分的一个DOMString,开头有一个 /
。
包含 URL 参数的一个DOMString,开头有一个“?”
。
包含块标识符的DOMString,开头有一个 #
。
包含 URL 中域名前的用户名的一个DOMString。
包含 URL 域名前的密码的一个 DOMString。
包含页面来源的域名的标准形式DOMString。
方法
Location
没有继承任何方法,但实现了来自URLUtils
的方法。
加载给定 URL 的内容资源到这个 Location 对象所关联的对象上。
重新加载来自当前 URL 的资源。他有一个特殊的可选参数,类型为 Boolean,该参数为 true 时会导致该方法引发的刷新一定会从服务器上加载数据。如果是 false
或没有制定这个参数,浏览器可能从缓存当中加载页面。
用给定的 URL 替换掉当前的资源。与 assign()
方法不同的是用 replace()
替换的新页面不会被保存在会话的历史 History中,这意味着用户将不能用后退按钮转到该页面。
返回一个DOMString,包含整个 URL。它和读取URLUtils.href的效果相同。但是用它是不能够修改 Location 的值的。
其中这些内容都会与我们当前所在的页面产生直接的关联也就是说我们修改其中的某个属性或方法整个浏览器和页面也会跟着进行相应的变化。
执行完以后页面和浏览器也跳到了相应的地址
Location 接口表示其链接到的对象的位置(URL)。所做的修改反映在与之相关的对象上。
Document 和 Window 接口都有这样一个链接的 Location,分别通过 Document.location和Window.location 访问。
document.location , window.location
location 是 built-in 函数 Location 的实例化对象
location.href 会影响当前页面url
location.href = 'http://www.xxxx.com';
当设置了 location.href 后,页面会随之改变
WebAPILocation用法
Navigator
Navigator
接口代表了用户代理的状态和身份,它允许脚本对其进行查询并注册自身以便执行某些活动。
可以通过 window.navigator 只读属性获取 Navigator
对象。
Navigator 接口表示用户代理的状态和标识。它允许脚本查询它和注册自己进行一些活动。
可以使用只读的 window.navigator 属性检索 navigator 对象。
navigator 是 built-in 函数 Navigator 的实例化对象
方法都在:navigator.__proto__ / Navigator.prototype 里面,但是这样访问是非法的 Illegal invocation
字符串属性
特殊的字符串属性
navigator.getBattery
navigator.getBattery().then((a)=>{console.log(a);window.battery = a;});
navigator.connection;
navigator.geolocation;
navigator.hardwareConcurrency;
navigator.keyboard.getLayoutMap().then((a)=>{console.log(a)})
navigator.plugins
navigator.mimeTypes
AudioContext//跟音频相关的
AudioContext
document
document
接口表示任何在浏览器中载入的网页,并作为网页内容的入口,也就是 DOM 树 (en-US)。
在 js中,dom节点也是通过对象实现的。可以通过 console.dir 查看dom节点对象细节
document中的元素选择器方法
document.getElementById//查找ID
document.getElementsByClassName
document.getElementsByTagName//找标签
document.getElementsByClassName('hero-copy')[0]
console.dir(document.getElementsByClassName('hero-copy')[0])
document.getElementsByClassName('hero-copy')[0].innerHTML = ''
创建dom节点