js基础查漏补缺(更新)
js基础查漏补缺:
- NaN != NaN;
复制数组可以用slice;
数组的sort、reverse等方法都会改变自身;
Map是一组键值对的结构,Set是key的集合;
Array、Map、Set都属于iterable类型,可用for...of遍历;
!!是将变量转为布尔类型的方法;
0.1+0.2!==0.3(计算机中用二进制来存储小数,而大部分小数转成二进制之后都是无限循环的值,因此存在取舍问题,导致精度丢失); - rest参数只能写在最后,前面用...标识;
一个函数接收另一个函数作为参数称之为高阶函数,比如map、reduce、filter、sort;
arr.map(String) 将数组元素都变为string类型;
// 数组去重
arr.filter(function(element, index, self) {
return self.indexOf(element) === index;
}) // 筛选素数
arr.filter(function(num){
var flag = true;
if(num < 2){
flag = false;
}else{
for(var i=2; i<num; i++){
if(num % i == 0){
flag = false;
break;
}
}
}
return flag;
})
返回闭包时尽量不要引用任何循环变量,或者后续会发生变化的变量,如果非要,可以用该函数的参数绑定值自执行;
借助闭包可以封装私有变量,携带状态,可以把多参数函数变成单参数;
由于this在箭头函数中已经按词法作用域绑定了,所以call和apply调用箭头函数时无法对this绑定,会忽略;
generator函数可以在执行过程中多次返回,看上去就像可以记住执行状态的函数,可以用for...of循环循环generator对象;
3. typeof NaN === 'number' typeof null === 'object'
尽量不要使用new String等去创建包装对象;
1+null === 1 1+undefined === NaN
123..toString() === '123' 或 (123).toString()
null,undefined没有toString方法
正则:\d(数字) \w(字母或数字) \s(空格) *(任意个字符) +(至少一个字符) ?(0或1个字符) {n}(n个字符) {n,m}(n到m个字符)
进阶正则:[]表示范围 ^开头 $结尾 ; / / 或 new RegExp() ;
模版解析:str.replace(/\{(.*?)\}/g, (match, key)=>obj[key.trim()]);
切分字符串:‘a,b;; c d’.split(/[\s\,\;]+/)
分组:用()表示要提取的分组,reg.exec(str),返回一个数组,第一个是匹配到的整个字符串,后面的表示匹配成功的子串;失败返回null
默认贪婪匹配(匹配尽可能多的字符),非贪婪匹配(加上?);
JSON.stringify第二个参数可以传入一个数组(输出指定的属性),也可传入一个函数(参数为key和value),第三个参数是缩进‘ ’;如果想精确控制序列化,可以给对象定义toJSON方法,直接返回需要的数据;
JSON.parse反序列化;
低版本浏览器无__proto__,所以用Object.create();
Promise的任务会在当前事件循环末尾中执行,而setTimeout中的任务是在下一次事件循环执行;
// new运算符做了什么
function foo(fn, ...rest){
let obj = Object.create(fn.prototype);
let val = fn.apply(obj, rest);
return isPrimitive(val) ? obj : val;
}
function isPrimitive(a){
let b = typeof a;
return !! (a===undefined || a===null || b==='boolean' || b==='number' || b==='string');
}
function A(){};
let a = foo(A);
4. location.assign('') location.reload();
dom树的根节点是document;
服务器可以根据cookie来区分用户,如果在cookie中设置了HTTPOnly属性,js脚本将无法读取cookie信息,这样能有效防止xss攻击;
不要使用history对象;
children是只读的,firstElementChild,lastElementChild,innerText,textContent,appendChild,insertBefore(new, target),removeChild,parentElement;
h5控件:type为date,datetime-local,color,获取值dom.value;
ajax:XMLHttpRequest对象,低版本ie用ActiveXObject;
5. 垃圾回收机制(Garbage Collection):
标记清除(推荐),分为标记阶段(把所有活动对象做上标记,深度遍历)和清除阶段(销毁非活动对象);
引用计数,会因为循环引用而无法清除;
6. requestAnimationFrame告诉浏览器在下次重绘之前调用指定函数来更新动画;一个在每次需要重新绘制动画时调用的包含指定函数的参数。这个回调函数有一个传参,DOMHighResTimeStamp,指示从触发 requestAnimationFrame 回调到现在(重新渲染页面内容之前)的时间(从 performance.now() 取得)。
7. es6、7大部分新特性的熟练理解和掌握
8. 希望2018年继续夯实基础,对每个知识点都有透彻的理解和认识,加油!
js基础查漏补缺(更新)的更多相关文章
- Java基础查漏补缺(2)
Java基础查漏补缺(2) apache和spring都提供了BeanUtils的深度拷贝工具包 +=具有隐形的强制转换 object类的equals()方法容易抛出空指针异常 String a=nu ...
- Java基础查漏补缺(1)
Java基础查漏补缺 String str2 = "hello"; String str3 = "hello"; System.out.println(str3 ...
- JS知识点查漏补缺
知识点1: 判断语句中遇到NaN即为 False 只需要注意遇到False即为False即可 使用join(),toString()皆可以将数组转化为字符串 二者的相同点在于都可以转化数组为字符串 二 ...
- CSS基础面试题,快来查漏补缺
本文大部分问题来源:50道CSS基础面试题(附答案),外加一些面经. 我对问题进行了分类整理,并给了自己的回答.大部分知识点都有专题链接(来源于本博客相关文章),用于自己前端CSS部分的查漏补缺.虽作 ...
- 《CSS权威指南》基础复习+查漏补缺
前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...
- Entity Framework 查漏补缺 (一)
明确EF建立的数据库和对象之间的关系 EF也是一种ORM技术框架, 将对象模型和关系型数据库的数据结构对应起来,开发人员不在利用sql去操作数据相关结构和数据.以下是EF建立的数据库和对象之间关系 关 ...
- Flutter查漏补缺1
Flutter 基础知识查漏补缺 Hot reload原理 热重载分为这几个步骤 扫描项目改动:检查是否有新增,删除或者改动,直到找到上次编译后发生改变的dart代码 增量编译:找到改变的dart代码 ...
- 2019Java查漏补缺(一)
看到一个总结的知识: 感觉很全面的知识梳理,自己在github上总结了计算机网络笔记就很累了,猜想思维导图的方式一定花费了作者很大的精力,特共享出来.原文:java基础思维导图 自己学习的查漏补缺如下 ...
- Django 查漏补缺
Django 查漏补缺 Django 内容回顾: 一. Http 请求本质: 网络传输,运用socket Django程序: socket 服务端 a. 服务端监听IP和端口 b. 浏览器发送请求 ...
随机推荐
- JavaScript学习笔记(一)数组排序
数组(Array)在JavaScript中是非常常用的类型,关于数组的排序,与C#等语法中的排序,乍看相似,其实差别比较大. Array的排序方法有两个,分别是reverse()和sort(). re ...
- [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...
- ansible批量管理软件部署及剧本
服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_6 ...
- SAP GUI 750 安装包 及 补丁3 共享
SAP GUI 750 安装包 及 补丁3 共享 链接: https://pan.baidu.com/s/1hstkfUs%20 密码: ggbz -------------------------- ...
- SSIS中循环遍历组件[Foreach Loop Container]
背景 每月给业务部门提取数据,每个分公司都要提取一般,先跑SQL,再粘贴到Excel中,然后发邮件给相关的人员.费时费力,还容易粘贴错位.因此,需要通过一个程序完成这些步骤.我首先想到的是通过SSIS ...
- Android之通过网络播放一首简单的音乐
首先,附上程序执行后的效果.例如以下图所看到的: 一.部署一个web项目到tomcatserver上: 1.这个小程序是结合网络来播放一首音乐的,首先,把我们搞好的一个web项目放置在tomcat安装 ...
- node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。
一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...
- 【 全干货 】5 分钟带你看懂 Docker !
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付 ...
- 参照企业微信审批业务,在Winform开发框架中工作流模块的实现业务审批
目前微信的企业号已经切换到企业微信里面,这个是一个APP程序,提供了很丰富的企业应用,其中包括了业务审批处理,审批业务包括请假.报销.费用.出差等很多个审批场景,在Winform开发框架中工作流模块这 ...
- linux 磁盘管理三部曲——(2)管理分区,文件系统类型格式化
上篇小编给大家讲解了磁盘结构和分区的介绍,这篇小编就给大家演示如何管理分区和文件系统类型格式化. 小编上篇已经提到如何使用磁盘,今天这两步,就是其中很重要的两步.(前几天写的有点急,有点乱,今天又整理 ...