FormData
概念
FormData
接口提供一种表示表单数据的键值对的构造方式.可以通过JavaScript模拟表单控件操作.可以通过XMLHttpRequest
的send
方法异步提交表单
使用
FormData
初始化表单对象,可以传入dom元素,可以为空
1 | //创建一个空的FormData对象 |
append
,set
append
:添加一个新值对到FormData对象,键存在将新值添加到值的集合中,不存在则添加新的键值对
set
: 通append
,区别在于如果键存在情况下,新的值覆盖旧值
1 | //formData.append(name,value) |
delete
删除键值对
formData.delete("name")
;
entries
和keys
entries
:返回FormData的键值对数据集合,是一个iterator
对象
keys
: 返回FormData的键集合,是一个iterator
对象
1 | const formOne = new FormData(); |
get
和getAll
get
: 返回指定key的第一个值
getAll
: 返回指定key的所有值
1 | formData.get("keyName"); |
has
检测某个key是否存在
formData.has("keyName")
values
返回一个允许遍历该对象中所有值的
迭代器
1 | //创建一个FormData测试对象 |
base64场景
- 上传图片,可以转化为base64上传
- 可以在页面显示base64图片,适应于不是很大的图
- url加密
移动端点击事件延迟
移动端会延迟300ms,来判断是否还有下一次点击,以此来判定是点击还是双击
避免延迟
禁止缩放
<meta name="viewport" content="width=device-width user-scalable= 'no'">
fastclick.js
随机字符串
1 | /** |
typeof null == "object"
不同的对象在底层都表示为二进制, 在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型, null 的二进制表示是全 0, 自然前三位也是 0, 所以执行 typeof 时会返回“object”
在 javascript 的最初版本中,使用的 32 位系统,为了性能考虑使用低位存储了变量的类型信息:
- 000:对象
- 1:整数
- 010:浮点数
- 100:字符串
- 110:布尔
九九乘法表
1 | /** |
浏览器同源策略
- 相同协议,host,端口才是同源
- 防止了
CSRF
的安全问题 - 防止
DOM
操作的安全问题
JS延迟加载
defer属性
async属性
body
之后setTimeOut
放到异步队列中
写一个暂停函数
1 | /** |
代码解析
1 | function test(){ |
随即打乱一个数组
1 | /** |
为什么{}+[]===0
{}
被当成一个独立的空代码块- 所以上述表达式等价于
+[] = 0
0 === 0
({}+[])
等于什么
- 加上括号后会当做表达式计算
- {}和[]都不是字符串
- {}->valueOf->返回对象本身->非原始值->toString->[object Object]
- []->valueIOf->返回对象本身->非原始值->toString->””
- “[object Object]” + “ “ = “[object Object]”
数组的交集,差集,补集,并集
1 | const arr1 = [1, 3, 4]; |
如何给li绑定事件(ul下有1000+个li)
1 | //通过事件冒泡,在父元素ul上绑定事件 |
"1,2,3,4"split()
split
有两个参数,第一个参数是字符串或正则表达式,表明按照什么规则分隔字符串.如果为空,则将整个字符串返回.第二个参数规定分隔的数量
"1,2,3,4".split() -> ["1,2,3,4"]
"1234".split("",2) -> ["1,2"]
Ajax请求
1 | /** |
红绿灯循环
1 | async function trafficLight(color, wait) { |