如果将任何变量分配给包含某个子字符串的字符串,我可以设置一个触发的数据断点吗?
例如,我想反向设计如何构建包含&ctoken=
的网址。这是通过复杂的JavaScript完成的,其目标是对其进行模糊处理。
如果我能告诉JS VM监视所有字符串变量并在任何变量上出现某个子字符串时中断,这对我有很大帮助。
这可能吗?
答案 0 :(得分:8)
在我开始之前 - 据我所知,这是不可能的。
您需要(甚至在创建调试功能之前)原始字符串类型已经装箱到String
本机内置对象,String
已经代理了。
更多解释:
只有
const s = "hi"
还不是String
的实例 - 内置的本机对象,由ECMAScript实现提供给您的作用域 - 但是是原始类型。
这种原始类型只不过是指向原始数据存储器引用的指针。我甚至假设有像Java一样的内置池来优化像
const s = "hi"
const x = new String("hi")
是数据对象的相同内存引用。但后者当然会被String
装箱。
http://bespin.cz/~ondras/html/classv8_1_1String.html
在原始类型上我们无法 - 即使我们想 - 添加订阅者。
例如然后:
s.charAt(i)
将自动装箱s
添加到其包装String
。
观察每种原始类型意味着我们必须将所有原始字符串打包到String
,这根本不是表现好事。
不仅如此,而且String
本身的实现也必须允许我们添加订阅者,因此已经代理了。
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'
而且我想 - 再也不会对表现有好处。
答案 1 :(得分:-1)
if(window.location.pathname.indexOf("&ctoken=") > -1){
debugger;// browser will put breakpoint automaticaly here, if condition is trully.
console.dir(window.location);
}