JS测试文章
目录
1. HOOK
原理: JS是一种弱类型语言,同一个变量可以多次定义。
- 不同JS文件,中类,中的函数hook
1.1. 直接替换函数
简单、粗暴易被检测
// 替换原有函数
var originalFunction = window.functionName;
window.functionName = function() {
// 自定义操作和行为
originalFunction.apply(this, arguments);
};
1.2. 为对象的属性赋值的方式
Object.defineProperty 通过
2. chrome控制台
3. 函数
3.1. 箭头函数
(单一参数) => {函数声明}
单一参数 => {函数声明}
() => {函数声明} //没有参数
(参数1) => 表达式(单一)
// 相当于:(参数1) =>{ return 表达式; }
//如果函数部分只是一个语句,则可以省略 return 关键字和大括号 {}
// ES5
var x = function(x, y) {
return x * y;
}
// ES6
const x = (x, y) => x * y;
// const比使用 var 更安全,因为函数表达式始终是一个常量。
3.2. arguments 对象
函数有个内置的对象 arguments 对象,包含了函数调用的参数数组。
函数调用的参数太多(超过声明)时可使用。
x = findMax(1, 123, 500, 115, 44, 88);
function findMax() {
var i;
var max = -Infinity;
for (i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
定义时,不规定参数类型,不检查传参数量。
4. 对象
对象: 拥有属性和方法,的特殊数据类型。
4.1. 原型继承
对象都从原型继承属性和方法。
比如: 数组对象继承自 Array.prototype。Person 对象继承自 Person.prototype。
向对象添加属性和方法
function Person(first, last) {
this.firstName = first;
this.lastName = last;
}
Person.prototype.nationality = "English";
//添加nationality属性
function Person(first, last) {
this.firstName = first;
this.lastName = last;
}
Person.prototype.name = function() {
return this.firstName + " " + this.lastName;
};
//添加name()方法
4.2. 访问对象内的方法:
name = person.fullName(); //调用函数 name = person.fullName; //返回函数定义的字符串 //function() { return this.firstName + " " + this.lastName; }
几乎所有的对象都是 Object 类型的实例,它们都会从 Object.prototype 继承属性和方法。
4.3. 对象构造器函数
function Person(first, last) { this.firstName = first; this.lastName = last; } var x1 = new Person("Bill", "Gates");
函数名,首字母大写
是个函数,不用new,this关键字将指向全局window对象。
4.4. 内建构造器
var x1 = new Object(); // 一个新的 Object 对象
var x2 = new String(); // 一个新的 String 对象
var x3 = new Number(); // 一个新的 Number 对象
4.5. 内建构造器的省略写法
var x1 = {}; // 新对象
var x2 = ""; // 新的原始字符串
var x3 = 0; // 新的原始数值
var x4 = false; // 新的原始逻辑值
var x5 = []; // 新的数组对象
var x6 = /()/ // 新的正则表达式对象
var x7 = function(){}; // 新的函数对象
4.6. JSON对象
浏览器与服务器之间进行交换时,这些数据只能是文本。
JSON 属于文本。
对象转换为JSON
var myObj = { name:"Bill Gates", age:62, city:"Seattle" };
var myJSON = JSON.stringify(myObj);
window.location = "demo_json.php?x=" + myJSON;
JSON 转换为对象
var myJSON = '{ "name":"Bill Gates", "age":62, "city":"Seattle" }';
var myObj = JSON.parse(myJSON);
document.getElementById("demo").innerHTML = myObj.name;
4.7. JSON VS XML
XML也是纯文本。
XML需要解析器
JSON 和 XML 都能被 XMLHttpRequest 读取
JSON 实例
{"employees":[
{ "firstName":"Bill", "lastName":"Gates" },
{ "firstName":"Steve", "lastName":"Jobs" },
{ "firstName":"Elon", "lastName":"Musk" }
]}
XML实例
<employees>
<employee>
<firstName>Bill</firstName>
<lastName>Gates</lastName>
</employee>
<employee>
<firstName>Steve</firstName>
<lastName>Jobs</lastName>
</employee>
</employees>
事件
冒泡:
捕获:
JS数据类型
值类型:
字符串String
数字Number
布尔Boolean
空Null
未定义Undefined
Symbol:ES6引入,表独一无二的值。对象类型:
对象Object
数组Array
函数Function
正则RegExp
日期Date