肉丝姐js逆向课程保姆级笔记

肉丝姐课程序言

励志成为一位大佬,你给我加把油。
由于课程的难度就摆在那里,也难以下咽。所以制定一个特别简单的计划,每5分钟就总结一次。
郁闷,说的都是中国话,为什么就不理解呢?

JS0601课时①环境的搭建与js简介

肉丝姐姐卡卡的一顿装,对于本人菜鸡来说,属实没必要。各位看官,可以酌情观看安装。

JS0603课时②:基本数据类型(上)

  • 00:00–05:00
    原始类型:数值,字符串,布尔值
    合成类型:对象 (object,array,function)
    特殊值:Undefined,null

    查看类型的运算符
    typeof : 可以检查没有声明的变量,不会报错
    instanceof
    Object.prototype.to.String

  • 05:00-10:00
    null 的类型是object,转换为数值是0
    Undefined 的类型是 Undefined,转换为数值是NaN
    建议使用null来定义

  • 10:00-15:00
    转换成布尔值为false的类型有
    undefined,null,false,0,NaN,空字符串。infinity
    转换成布尔值为True的类型有
    空数组 [ ] 空对象 { } 其余全部
    js内部,所有数字都是以64位浮点数形式存储,整数也是如此。
    由于浮点数不是准确的值。所以涉及到小数的比较和运算要特别小心。

  • 15:00-20:00
    默认情况下,js内部会把其他进制转变成十进制。
    NaN 的数据类型是Number
    与任何数运算,得到结果都是NaN。
    不等于任何值,包括它本身。
    当溢出时,返回infinity

  • 20:00-25:00
    parseInt( ) : 字符串 转换为 整数,从左到右扫描,只认识数字,一旦不是数字,返回NaN
    (数字,数字的进制)转为十进制
    parseFloat( ):转换成浮点数
    is NaN 不等于任何值 (value != value )
    is Finite
    字符串:单引号里面得是双引号,双引号里面是单引号。

  • 25:00-30:00

  • 30:00-35:00
    对象:键值对,键可以不带冒号。
    键不能是数字,数字无法查找。

a={
a:3,
c:4,
}
var b=a; # 表示拷贝
console.log(b.a ) # 3

不同的变量指向同一个指针,修改其中一个变量,就会影响所有变量。
也就说改变b,就会改变.这种情况只局限于对象。

如果两个变量指向同一个原始类型,那就是拷贝。
var a=1;
b=a;
b=3
console.log(a) # 1
  • 35:00-40:00
    对象属性的查看,console.log(Object.key(对象))
    对象的删除:delete a.a 直接删除成功
    只能删除自己的属性,不能删除继承的属性
    属性是否存在:console.log(“a” in 对象)
    console.log(对象.hasOwnProperty(“a”))
  • 40:00-45:00
    for in 打印所有属性
    函数的声明
function(){}
var b =  function(){}
var c = new Function("a","b"," return a+b ")# 括号里面进行混淆
console.log(c(1,2))
  • 45:00-50:00
    函数的属性和方法
funcionb(){
console.log(a);
var a=100;
}
b()
console.log(b.name,b.length,b.toString)
# length 是形参的长度
  • 50:00-55:00
    函数的作用域
    闭包

  • 55:00-60:00
    arguments对象
    不懂,先往下看。

  • 作业
    不知道说了个啥

    JS0607课时③基本数据类型(下)

  • 00:00–05:00
    作业第一题,虽然比较简单,但是我不懂

  • 04:36–13:24
    作业第二题:简单的补环境
    补环境,一直听说过这个操作,但是没有体会过整个操作,听了2遍,大概有点理解了。
    主要思想:
    运行一遍,把所有报错都补上去,让其输出与浏览器输出保持一致。

  • 13:24–20:35
    闭包:
    函数是内部与外部的桥梁

function f(){
    var count=0;
    function add(){
        count++;
        console.log(count);
    }
    return add
}

var f2 = f()

f2()
f2()
f2()
  • 20:36–23:10
    立即调用函数表达式
function test(){
    console.log("i am test ")
}

第一种
var t = function test(){
    console.log("i am test ")         
}()
第二种
(function (){
    console.log("i am test ")
})()
第三种
(function (){
    console.log("i am test ")
}())

目的:不想起函数名,避免污染全局变量。内部形成封闭的作用域。

  • 23:10–31:14
    eval(字符串) ,执行字符串js代码,并改变当前的作用域的变量
var a = 2
eval("console.log(a);a++")
console.log(a)

2
3

当 eval别名调用,js规定使用全局变量。
node.js不支持别名调用,浏览器中支持

没使用别名调用之前
var a = 2;
(function (){
    var a = 3;
    eval("console.log(a);a++");
})()
console.log(a)

3
2

使用别名调用之后

var a = 2;
var e = eval;
(function (){
    var a = 3;
    e("console.log(a);a++");
})()
console.log(a)

2
3
  • 31:14–36:45
    数组:typeof 数组 是Object
    Object.key(数组)返回所有的键名
var array = [1,"asd",true,{},function(){}]
console.log(Object.keys(array))

[ '0', '1', '2', '3', '4' ]
  • 33:22–33:22
    数组:length操作,可执行删除操作,可数长度
var array = [1,"asd",true,{},function(){}]
console.log(array.length)
array.length = 4;
console.log(array)

5
[ 1, 'asd', true, {} ]

数组:添加操作
注意:可添加为键值对,并且length删不掉

var array = [1,"asd",true,{},function(){}]
array.name123="name123"
console.log(array)
array.length = 0;
console.log(array)

[ 1, 'asd', true, {}, [Function (anonymous)], name123: 'name123' ]
[ name123: 'name123' ]
逆向时候,会有这样的属性藏在其中
  • 33:22–36:43
    数组的循环
    for in
    for
    while
    forEach
  • 36:43–41:13
    数组的空位
var array = [1,"asd",true,{},function(){},,344]
console.log(array)
[ 1, 'asd', true, {}, [Function (anonymous)], <1 empty item>, 344 ]
  • 41:13–44:03
    类似数组的对象
    不懂啥意思
    -44:03–54:53
    强制类型转换 有三种
    Boolean()布尔值的转换最为简单,第二节课有介绍。
    Number(),String( )这两个比较麻烦
var obj={}
console.log(Number(obj))
console.log(String(obj))

NaN
[object Object]

为啥会出现这样的结果呢?
obj里面继承了什么,打印出来的这些。
把这两个属性重写,就不会调用继承的属性

var obj={
    "toString":function(){
          return "obj"
    },
    "valueOf":function(){
          return "123"
    },
}
console.log(Number(obj))
123               <返回类型是number>

Number是先找valueOf,如果valueOf为空,就会去找toString。都为对象,就报错。

var obj={
    "toString":function(){
          return "obj"
    },
    "valueOf":function(){
          return "123"
    },
}
console.log(String(obj))

obj

String 先找toString,如果toString为空,会找valueOf。都为对象,就报错。

  • 44:03–54:53
    错误处理机制
    js在解析运行时,一旦发生错误,引擎就会抛出一个错误对象。js原声提供Error构造函数满所有抛出的错误都是构造函数的实例。
    一切皆对象
    Error 实例对象的属性
    message 出错时的提示信息
    name 错误名称(非标准属性)
    stack 错误的堆栈(非标准属性)
    throw :手动中断程序
    try catch: 程序不会中断,捕捉异常
    finally:不管是否出现错误,都必须在最后运行。
  • 54:53–01:04:23
    完,撒花

JS0608课时②:JS对象特性详解与Hook

  • 00:00-08:47
    肉丝课前舞蹈时间
  • 08:47-14:59
    Object对象
    dir(Object)打印出来的prototype方法是实例中可以引用,剩下的是静态方法。
    js:基于构造函数,原型链
    通过一个构造函数,创建一个实例对象。
  • 14:59-20:06
    创建对象的方式
var init = function(a){
      this.a=a
}
var obj = new init("dta")
console.log(obj)       ## 往上回溯是prototype

var obj2 = Object.creat(obj) 
console.log(obj2)       ## 往上回溯是obj2
  • 20:06-20:06
    暂停读PPT,理解。
    原型对象的属性不是实例对象自身的属性。只要修改原型对象,变动就会立刻体现在所有实例对象上。 (一改则全改)
    当实例对象本身没有某个属性和方法时,它就会到原型对象上找到该属性或方法。(实例没有,向上找)
  • 20:07-25:30
    代码实现ppt
  • 25:31-26:11
    原型链:继承关系
  • 26:11-35:13
    环境监测,重写to.String方法
  • 35:13-41:30
    Object的静态方法
    在这里插入图片描述
  • 41:35-41:30
    重头戏:hook
    看到这里的我成功被劝退,实在是听不懂,所以回归基础。
    老老实实看基础。
    我就是打不死的小强,条条大路通罗马,生撸基础,就不信了怎么可能学不会。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值