for…of 是 ES6 新增的遍历方式,可遍历数组和对象等。for…in 是 ES3 出现的。
对于数组来说:for in 和 for of 都可以循环数组,for…in 输出数组的索引 index。for…of 输出数组每一项的值。
对于对象来说:for in 可以遍历对象,for of 不能遍历对象,只能遍历带有 iterator 接口的,例如 Set,Map,String,Array
总结:
ajax: 一个 JavaScript 技术,内部基于 XHRHttpRequest 来实现
axios: 一个请求框架,也是基于 XHRHttpRequest 封装和 promise 对象,支持同步和异步,提供了较多方法
fetch: 一个原生请求 API,基于 Promise 来实现
ajax 没有自动转换数据类型的机制,而 axios 和 fetch 支持自动将返回的数据转换为 JSON 数据格式或其他类型
ajax: 一种创建交互式网页的开发技术,可做到无需重新加载整个网页的情况下,更新部分网页,也叫局部更新。
axios: 一个基于 promise 的 HTTP 库,可用在浏览器和 node.js 中。
fetch: 不是基于 ajax 的封装,而是原生 js, 没有使用 XMLHttpRequests 对象
console.log(7 & 1); // 1 console.log(8 & 1); // 0
// 不能对负数取整 console.log(~~11.71); // 11 console.log(11.71 >> 0); // 11 console.log(11.71 << 0); // 11 console.log(11.71 | 0); // 11 console.log(6.83 >>> 0); // 6
console.log(12 >> 1); // 6
let a = 4654; // 如何和目标数相等,则等于 0,否则等于其他数 if (a ^ 1171) { // 不等于的情况 console.log(12); } else { // 等于的情况 console.log(34); }
n & (n - 1); // 是 0 则是 2 的整数次幂,不是则返回其他数 console.log(16 & (16 - 1)); // 0 console.log(15 & (15 - 1));
// before if (arr.indexOf(item) > -1) { // code } // 按位非:item 将会转换为 string 类型进行查找 if (~arr.indexOf(item)) { // code }
// 求负数的相反数 console.log(~-n + 1); // n // 求正数的相反数 console.log(~n + 1); // -n
console.log(8 << 1); // 16 console.log(7 << 1); // 14
console.log(2 << 2); // 8
console.log(2 << 4); // 16
参考:https://juejin.cn/post/6938581764432461854
module.exports
导出变量和函数,可导出任意类型的值,使用 require
来导入
module.exports、exports
// 导出一个对象 module.exports = { name: '蛙人', age: 24, sex: 'male', }; // 导出任意值 module.exports.name = '蛙人'; module.exports.sex = null; module.exports.age = undefined; // 直接导出,省略 module 关键字 exports.name = '蛙人'; exports.sex = 'male'; exports = { name: '蛙人', };
// 直接导入 let data = require('./index.js'); let { name, age } = require('./index.js'); console.log(data); // { name: "蛙人", age: 24 } console.log(name, age); // 蛙人,24 // 动态导入 let lists = ['./index.js', './config.js']; lists.forEach(url => require(url)); // 动态导入 if (lists.length) { require(lists[0]); // 动态导入 }
// index.js let num = 0; module.exports = { num, add() {}, }; let { num, add } = require('./index.js'); console.log(num); // 0 add(); console.log(num); // 0 num = 10;
ESM:导出分两种:单个导出 export
,默认导出 export default
, 导入使用 import...from
// 导出变量 export const name = "蛙人" export const age = 24 // 导出函数也可以 export function fn() {} export const test = () => {} // 如果有多个的话 const name = "蛙人" const sex = "male" export { name, sex } // 混合导出 export const name = "蛙人" export const age = 24 export default { fn() {}, msg: "hello 蛙人" }
// index,js export const name = '蛙人'; export const age = 24; import { name, age } from './index.js'; console.log(name, age); // "蛙人" 24 // 如果里面全是单个导出,我们就想全部直接导入则可以这样写 import * as all from './index.js'; console.log(all); // {name: "蛙人", age: 24} // 混合导入 // index,js export const name = '蛙人'; export const age = 24; export default { msg: '蛙人', }; // index2.js import msg, { name, age } from './index.js'; // 起别名 import { default as all, name, age } from './index.js'; console.log(msg); // { msg: "蛙人" }
// index.js export let num = 0; export function add() { ++num; } import { num, add } from './index.js'; console.log(num); // 0 add(); console.log(num); // 1 num = 10; // 抛出错误 // ESM 中的 import 在文件最顶部,不可动态加载
Q:(question)
R:(result)
A:(attention matters)
D:(detail info)
S:(summary)
Ana:(analysis)
T:(tips)