持续补充

1. 浏览器 DOM事件机制?

  • addeventlistener(event, callback)
  • 事件冒泡: 事件委托的原理 <ul><li>..... 事件绑定到ul即可
  • 事件捕获
  • e.eventPropagation() 阻止 冒泡向上传播
  • e.preventDefault() 阻止 自身 事件

2. JSBridge 如何通信?

  1. url schema: Native拦截 Webview请求。
  2. native api: 类似注入http://window.xxx下,让JS调用。

3. 'a' 和 String('a') 和 new String('a')?

  1. new String('a') => 本质是对象object了,引用类型,值保存在堆内存 heap 中。
  2. 'a' string 类型,基本类型的值保存在 stack 栈 内存中。
  3. String('a') 同 2

4. js浮点数运算不精确 如何解决?

  • 问题: JS 浮点数精度 计算有问题
  • 原因: JS 类型只有Number, 只有64位形式储存, 所以1 和 1.0 是一样的,JS利用 64位浮点数存储,浮点数的二进制是表示是无穷的,所以多出位数会被截掉。
  • 就是说 10进制的 转 2进制后,因为二进制表示会有舍弃某位置,再转换回来 10进制,就会出问题。
  • 解决1: 转成整数 后 再运算,再转小数。例如: (0.1 * 10 + 0.2 * 10) / 10
  • 解决2: 还有些包支持。npm引用去吧。

JavaScript 浮点数陷阱及解法

5. DOM 操作 基础

创建 DOM节点 / 文本

  • document.createElement('div')
  • document.createTextNode('我只是个文本')

获取 / 查询 DOM节点

  • document.getElementById
  • document.getElementsByClassName 返回所有 数组格式
  • document.getElementsByTagName('div') 返回所有 数组格式
  • document.querySelector(".classname") 获取第一个class名为 classname
  • document.querySelectorAll("div.note, div.alert") 获取所有 class为note 或 alert的 div元素

DOM 节点下的 属性 set/ get, 有没有, 移除

  • document.getElementById('dom-id').getAttribute('class')
  • document.getElementById('dom-id').setAttribute('class', 'add-attribute')
  • hasAttribute('class')
  • removeAttribute('class')

DOM 变更 增 删 改

  • dom.appendChild(el)
  • dom.removeChild(el)
  • dom.replaceChild(el1, el2)

6. DOM 节点类型

DOM的节点类型

7. let const var

  • let 类似 var, 但是 let const 有变量声明提升,但不会给他们分配内存空间,所以也相当于不提升了。
  • const: 没有变量提升,不许重复声明,重复赋值也不行。

let 和 const 有变量声明提升, 但不会因为声明而分配内存区域,所以报错。

console.log(a) // undefined 因为变量提升,提前声明了
var a = '1'console.log(b) // Uncaught ReferenceError: b is not defined 报错,let无声明提升
let b = '1'

let 和 const 不能重复声明

let a = 1
let a = 2 // 报错var b = 1
var b = 2 // 不会报错

8. 前端存储方式

  • cookies: 4kb, 每个domain有规定20个cookies
  • (web存储) local storage: 5M大小 持久保存
  • (web存储) session storage: 当前会话级别存储
  • IndexedDB: 50M + 支持离线化存储 兼容性高些
  • IndexedDB 是异步读取 localstorage同步读取

9. 判断数组

  • Array.isArray() es6 新判断
  • Object.prototype.toString.call(xx) === '[object Array]'

10. Map / Set 和 Object区别

1. Map类似Object

但是Object key值只能是string类型, Map key 值可以是Object, Boolean都行

2. Set类似Array, 但是是返回的是不重复的数组

const key1 = { a: 1 }
const key2 = false
const map = new Map()
map.set(key1, 111)
map.set(key2, 222)
map.get(key1)key1 = null // 我们清空了该引用类型, 但是
map.keys() // 我们还是可以从 这种方式直接获取到 key1的值/*
Map: {[[Entries]]: {0: {Object => 111},1: {false => 222}}
}
*/问题: 因为key值可以是object引用类型, 意味着会保存在堆内存中,
即使key1 = null 释放,在mao里的还是会存在的
这样会引起内存泄露哦

new Set([1, 2, 1,1,1,1])
/*
Set: {[[Entries]]: {0: 11: 2}
}

11. WeakMap / WeakSet

  • 只能用 key值为引用类型的, 当key在内存空间中被清除了,WeakMap 里对应的也会消失。
  • 但是上描述的方式,map不会
const weakmap = new WeakMap()
const key1 = { a: 1 }
weakmap.set(key1, 1) // key值只能是 引用类型
weakmap.set('key2', 'key2') // 报错,只能应用类型key1 = null // key作为引用清空了, 随之 weakmap 也没了该值

  • WeakSet 只能用 对象作为值
const weakset = new WeakSet()
var a = { name: 'a' }
var b = { name: 'b' }
weakset.add(a)
weakset.add(b)console.log(weakset.has(a)) // 检查是否有a
a = null // 则weakset里a也会跟着消失
console.log(weakset) // 此时只有一个值了 b

总结: 必须是引用类型,无论是WeakMap 中 key 还是 WeakSet中的值,都必须是引用类型。

刚该引用类型清空的时候,随之WeakSet / WeakMap里也会被清空。

好处: key值或值必须是引用类型,直接回收掉,不会引起内存泄露。

不好: 无法遍历。必须是对象。

div中移除某个元素 js_[JS基础] 13 - 其他 JS 基础相关推荐

  1. js父元素获取子元素img_css,前端_父标签div中包含一个子元素img标签,子元素div标签,为什么img要加上浮动,子元素div才会处于正常位置?,css,前端 - phpStudy...

    父标签div中包含一个子元素img标签,子元素div标签,为什么img要加上浮动,子元素div才会处于正常位置? dom结构 如图img加上float 子元素div显示正常. 不加float div显 ...

  2. div中定义局部变量_中高级前端必须要了解的--JS中的内存管理

    像C语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()用于分配内存和释放内存. 而对于JavaScript来说,会在创建变量(对象,字符串等)时分配内存,并且在不再使用 ...

  3. List中移除指定元素

    例一: 想在list中删除元素,先看下面的这一段代码: public class App2 {public static void main( String[] args ){List<Stri ...

  4. Redis 中的 集合(Set)SREM:从集合中移除元素 忽略不存在的元素

    这里写目录标题 5.2 SREM:从集合中移除元素 5.2.1 忽略不存在的元素 5.2.2 其他信息 参考目录 5.2 SREM:从集合中移除元素 通过使用SREM命令,用户可以从集合中移除一个或多 ...

  5. list中移除元素:用remove(i)方法遇到的坑以及替代方法

    代码如下: for (int i = 0; i < organDtos.size(); i++) {if(organDtos.get(i)!=null && organDtos. ...

  6. div中随机显示个性标签

    参考网上的代码,自己封装了js.实现后效果如图: 刷新后,标签颜色和位置会变化.JS代码如下: /***** 在div中随机展示tag元素* * 参数* boxWidth:div盒子宽度* boxHe ...

  7. Redis 笔记(06)— set 类型(向集合添加元素、获取集合元素个数、判断集合中是否包含某个元素、删除给定元素、返回集合中所有元素、计算集合的交集、并集、差集)

    Redis 的 set 集合内部的键值对是无序的唯一的.它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 NULL .当集合中最后一个元素移除之后,数据结构自动删除,内存被回收. ...

  8. canvas笔记-在canvas中使用其他HTML元素

    这里使用的原理是使用css把div中关于html的元素通过布局位置,以及透明相关的设置,将其设置到canvas上,这样看起来就是在canvas绘制的按钮.然后使用JavaScript获取按钮的数据或者 ...

  9. html中js方法中如何传递本元素对象,JS HTML DOM (文档对象模型)

    DOM简介 当网页加载时,浏览器会创建页面的文档对象模型(DOM).通过DOM,JS可以对HTML实现以下操作: 改变页面中的所有HTML元素. 改变页面中的所有HTML属性. 改变页面中的所有CSS ...

最新文章

  1. 提高PHP运行速度的小技巧
  2. 神经学家探寻:机器如何拥有意识!如何避免机器人伤害我们!
  3. Python自定义函数的创建、调用和函数的参数详解
  4. 使用urllib2简单爬取并保存内涵吧内涵段子指定分页的的描述信息
  5. 《Forward团队-爬虫豆瓣top250项目-设计文档》
  6. 数据结构题:由逆置数组方法——逆置线性表L的所有元素
  7. Oracle中procedure和function创建举例
  8. 抓取html中用到的css_如何使用HTML和CSS制作像《星球大战》一样的抓取文字
  9. matlab多缝夫琅禾费,常见的多缝夫琅禾费衍射.ppt
  10. Linux进程全解7——父进程wait / waitip回收子进程
  11. Spring Data JPA 从入门到精通~查询方法的创建
  12. java8新生代_jdk8.0的jvm详情
  13. jude的一些基本用法
  14. window获取历史url_Facebook 开出历史最高赏金,55,000 美元奖励十年漏洞发现者
  15. 更灵活、有个性的卷积——可变形卷积(Deformable Conv)
  16. java 特殊字符过滤器_java处理url中的特殊字符
  17. DisSent: Learning Sentence Representations from Explicit Discourse Relations
  18. 会议室预约微信小程序推荐_又是BYPASS!微信小程序预约 YEEZY BOOST 350 V2 只要3S就能搞定!...
  19. python bootstrap 中位数_【机器学习】Bootstrap详解
  20. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.异常处理

热门文章

  1. double转换为int以及浮点型相加损失精度问题
  2. 为什么说百度教育大脑3.0,是中国教育迎来的真正智慧大脑?
  3. 解决 —— SublimeText3: No module named ‘urllib2′
  4. 理解Docker——深入引擎室
  5. 从“上云”到“云管理”,中国首个多云管理平台评估标准有何妙处
  6. 字符转换指令tr,col,expand
  7. GBDT--简单理解
  8. javascript体系-DOM原理
  9. Glib实例学习(5)平衡二叉树
  10. 基于SSM实现健康食品零售网站