sas*_*alm 9 javascript debugging breakpoints
如果将任何变量分配给包含某个子字符串的字符串,我可以设置一个触发的数据断点吗?
例如,我想反向设计如何&ctoken=构造包含的URL .这是通过复杂的JavaScript完成的,其目标是对其进行模糊处理.
如果我可以告诉JS VM监视所有字符串变量并在任何变量上出现某个子字符串时中断,这将对我有很大帮助.
这可能吗?
在我开始之前 - 据我所知,这是不可能的.
您需要的内容(甚至在创建调试功能之前)是已经String装入本机内置对象String然后已经代理的原始字符串类型.
更多解释:
只有
const s = "hi"
Run Code Online (Sandbox Code Playgroud)
还不是String内置本机对象的实例,它由ECMAScript实现提供给您的作用域 - 但是是原始类型.这种原始类型只不过是指向原始数据存储器引用的指针.我甚至假设有像Java一样的内置池来优化像
const s = "hi"
const x = new String("hi")
Run Code Online (Sandbox Code Playgroud)
是数据对象的相同内存引用.但后者当然会被装箱String.
http://bespin.cz/~ondras/html/classv8_1_1String.html
在原始类型上,我们不能 - 即使我们想 - 添加订阅者.
例如然后:
s.charAt(i)
Run Code Online (Sandbox Code Playgroud)
将自动装箱s到其包装机上String.
观察每一种原始类型意味着我们必须将所有原始字符串包装起来,String这对于性能来说根本不是一件好事.
不仅如此,而且String自身的实现必须允许我们添加订户,因此已经代理.
在JS这样的代理看起来像这样(为了让代理人更明白我的意思):
var proxiedString = new Proxy(String, {
defineProperty(target, propKey, propDesc) {
console.log('defined a new string')
},
set(obj, prop, value) {
console.log('set a new value to a string')
}
});
proxiedString.x = 'newPropValue'
Run Code Online (Sandbox Code Playgroud)
而且我想再次 - 对性能不会有好处.
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |