最近复习 JavaScript 教程
-https://wangdoc.com/javascript,
发现好多没记住的,特以此记~
Date
Dtae() 和 new Date() 区别,Date() 函数不能带参数,属于静态方法
- new Date()*1 === new Date().getTime() === Date.now() // 获取时间戳
复制代码- new Date(y, m, 0).getDate() // 获取这个月有多少天,传入年份和月份
复制代码- new Date(y, m, 0).getDay() // 获取这个月最后一天是星期几
复制代码- new Date(y, m-1, 1).getDay() // 获取这个月第一天是星期几
复制代码
RegExp
. 点字符匹配除回车(\r)、换行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符
[^] 表示匹配一切字符,其中包括换行符
str.replace(/2/gi, '1') 第二个参数可以使用美元符号$,用来指代所替换的内容
- $n:匹配成功的第n组内容,n是从1开始的自然数。
复制代码- 'hello world'.replace(/(\w+)\s(\w+)/, '$2 $1')
复制代码- 'abc'.replace('b', '[$`-$&-$\']')
复制代码 JSON.stringify
console.log(JSON.stringify(obj, null, 2)) 接受三个参数,打印对象格式化
参数一
如果对象的属性是 undefined、函数或 XML 对象,该属性会被 JSON.stringify 过滤
如果数组的成员是 undefined、函数或 XML 对象,则这些值被转成 null
正则对象会被转成空对象
忽略对象的不可遍历的属性
参数二
接受一个数组,作为第二个参数,指定需要转成字符串的属性,只对对象的属性有效
还可以是一个函数,用来更改 JSON.stringify 的返回值
参数三
如果是数字,表示每个属性前面添加的空格(最多不超过10个)
如果是字符串(不超过10个字符),则该字符串会添加在每行前面 JSON.stringify 发现参数对象有toJSON方法,就直接使用这个方法的返回值作为参数,而忽略原对象的其他参数
Error
- new SyntaxError() // 语法解析错误
复制代码- new ReferenceError() // 非法或不能识别的引用值,使用未声明的变量
复制代码- new TypeError() // 操作类型错误,使用自身没有的方法,let a = 22 a.sort() a 是 Number 类型而非数组
复制代码- new RangeError() // 数值越界,Maximum call stack,调用一个不终止的递归函数,计算的值超出最大范围
复制代码- new URIError() // encodeURIComponent() encodeURI() 等URI函数使用错误
复制代码 Array
- [1, 2, 3, 4, 5].splice(2) 分离成两个数组 [1, 2] [3, 4, 5]
复制代码 es6 明确把空位转成 undefined
es5 有的跳过(forEach、filter、reduce、some、every)
map() 会跳过空位,但会保留这个值
join() 和 toString() 会将空位视为 undefined ,
而 undefined 和 null 会被处理成空字符串
Number
- seed = (seed * 9301 + 49297) % 233280; // 为何使用这三个数?
复制代码- let rc = seed / (233280.0);
复制代码- return Math.ceil(rc * num);
复制代码- [/code][code]es6 分别用前缀 0b 0o 0x 表示 2 8 16 进制
复制代码- 0~9 a~z A~Z '+' '/' 10 + 26 + 26 + 2 = 64
复制代码- 不足补\x00(零值字节),然后在末尾加上1个或2个=号,表示补了多少个零值字节
复制代码 Number.MAX_SAFE_INTEGER 9007199254740991
表示能够精确表示的最大整数
Number.MIN_SAFE_INTEGER -9007199254740991
表示能够精确表示的最小整数
Math
ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用
- Math.trunc() // 去除一个数的小数部分,返回整数部分
复制代码- Math.hypot(3, 4) // 5 返回所有参数的平方和的平方根
复制代码- Math.cbrt(8) // 2 计算一个数的立方根
复制代码- [/code][code]es6 新增指数运算符 2 ** 2 ** 2 => Math.pow(2, 4)
复制代码- 这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的。
复制代码- [/code][code]'hello'[1] // "e" 直接对字符串使用方括号运算符,仅能获取操作
复制代码 String
substring 类似slice,但是使用规则违反直觉,因此不建议使用substring方法,应该优先使用slice
- str.charCodeAt() // 十进制 Unicode 码点
复制代码- String.fromCharCode(97) // 逆操作
复制代码- str.substr(0, 4) // 从零开始取4个
复制代码- str1.localeCompare(str2) // Unicode 码点比较大小
复制代码 事件循环
参考文章:
-https://www.cnblogs.com/jiasm/p/9482443.html
- [/code][code]微任务 浏览器 Node
复制代码 严格模式
- 禁止删除变量 // delete x => 语法错误
复制代码- 禁用 fn.caller fn.arguments // 报错
复制代码
Flex
flex-grow flex-shrink flex-basis 放大 缩小占据的空间大小
- flex: 0 0 auto; // flex: none;
复制代码- flex: 1 1 auto; // flex: auto;
复制代码- flex: 1 1 0%; // flex: 1;
复制代码
Babel
AST 抽象语法树
- babel-traverse 对 ATS树进行遍历转译得到新的 AST树
复制代码- babel-generator 读取 AST树并将其转换为代码和源码映射
复制代码- [/code][code]对于新的 API、新的属性,两种处理方式
复制代码- babel-polyfill 把 es6环境整体引入到代码中
复制代码- regenerator-runtime、core-js
复制代码- babel-plugin-transform-runtime 按需引入
复制代码- regenerator-runtime、core-js
复制代码- babel-helpers 只引入单个,通过此插件可以把多次引入变成一个,减少代码体积
复制代码
Webpack
把项目看成一个整体,通过给定的主文件,webpack 从这个主文件的入口开始找到项目中的所有依赖文件,然后使用各种 loader 转化、插件处理、文件处理,最后打包输出到一个指定的文件夹中
webpack 打包优化措施:
- webpack.DllPlugin 拆分固定死的依赖文件,因为不会变化所以可以预先打包好,后面直接引用
复制代码- babel-loader 开启缓存 cacheDirectory: true
复制代码- noParse: /^(vue|vue-router|vuex|vuex-router-sync|axios)$/
复制代码 快速排序、冒泡排序
- function fast(arr) { // 快速排序
复制代码- if (arr.length arr[j+1]) {
复制代码- [/code][code] if (flag === 0) {
复制代码 斐波那契数列
- [/code][code] for (let i = 2; i < n; i++) {
复制代码 [code] if (n |
|