首页HTML开始的地方

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


posted @ 2024-05-19 09:36  csnotes  阅读(11)  评论(0编辑  收藏  举报

这是页脚html