JNUfeatherwit / blog

6 stars 0 forks source link

JS开发你需要知道的知识 #8

Open JNUfeatherwit opened 6 years ago

JNUfeatherwit commented 6 years ago

1.如何实现数组快速求和

eval(array.join('+')) //不建议用

2.如何在webstorm中添加注释模板

async function test1(){ const v=await test() console.log('test1',v) //上一层无throw,代码继续运行,但是v为undefined } test1() //输出结果 testError long_time_value test1 undefined

- 使用返回值判断请求成功与否  
我们经常把一些请求后端数据的方法放在store,一般在方法里面使用try catch 就做了请求失败的处理,所以在组件里调用这些异步方法均不会阻塞,即无论请求成功与否后面的代码都会执行。但是,有时我们需要在组件里根据请求成功与否执行不同的操作,比如成功获取数据时跳转,失败时不跳转等等,这时可以在请求方法执行await api后return true,在组件判断返回值是否为true,执行相应操作
### 3.如何简便地获取和操作 时间信息
使用momentjs

### 4.如何实现倒计时
最简单的倒计时就是使用setInternal,但是这种实现方式只能在当前类或当前页面里执行,且如果页面不在运行状态,例如app上按home回到桌面,倒计时是不会进行下去的  
真正的倒计时需要获取当前的时刻来进行判断,具体实现代码如下:

endTime = 0 seconds = 0 countDown = () => { if (seconds > 0) { seconds = Math.floor(((endTime - Date.now()) / 1000) % 60) } else { clearInterval(this.timer) } } startCountDown = () => { seconds = 60 endTime = Date.now() + 61000 this.timer = setInterval(this.countDown, 1000) } startCountDown()

#### 5.打包的时候下载的文件遇到connnect问题怎么办
下载的文件需要翻墙才能下载,但是就算翻墙软件已经打开,在命令行里面也无法使用,所以需要给webstorm设置代理

### 6.将变量快速转化为bool值
使用!!
### 7.唯一ID的实现
第一种:uuid

guid() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { let r = (Math.random() * 16) | 0 let v = c === 'x' ? r : (r & 0x3) | 0x8 return v.toString(16) }) }

第二种:Date()

### 8、什么是3元表达式

const b=a>0?a:0

### 9.ajax与fetch的区别
Fetch 是浏览器提供的原生 AJAX 接口。使用 window.fetch 函数可以代替以前的 $.ajax、$.get 和 $.post,promise则代替了 XMLHttpRequest

### 10、代码整洁之道
对象设置默认属性  
bad:

const menuConfig = { title: null, body: 'Bar', buttonText: null, cancellable: true };

function createMenu(config) { config.title = config.title || 'Foo'; config.body = config.body || 'Bar'; config.buttonText = config.buttonText || 'Baz'; config.cancellable = config.cancellable !== undefined ? config.cancellable : true; }

createMenu(menuConfig);

good:

const menuConfig = { title: 'Order', // 'body' key 缺失 buttonText: 'Send', cancellable: true };

function createMenu(config) { const config = Object.assign({ title: 'Foo', body: 'Bar', buttonText: 'Baz', cancellable: true }, config);

// config 就变成了: {title: "Order", body: "Bar", buttonText: "Send", cancellable: true} // ... }

createMenu(menuConfig);

### 11.chrome 快捷键
打开进程管理 :shilf+esc  
搜索栏自定义搜索 : 自定义的快捷键+空格(需要在设置里面的搜索引擎配置)
### 12.js是单线程的,但是浏览器不是单线程的,event loop属于js引擎
### 13.'&&'的问题

const a=b&&c

'&&'的执行步骤:先执行左边,如果b为true(不是null,undefined,'',0,NaN,false),则直接返回右边c,不论c为true或false;如果b为false,则返回b。  
所以如果需要返回布尔值,但是变量不是布尔值,需要在变量前面加上!!,比如:

const a='' return !!a&&

### 14.快速创建重复元素的数组

Array(num).fill(item)

### 15.使用rest参数代替arguments

形式:...变量名

// arguments变量的写法 function sortNumbers() { return Array.prototype.slice.call(arguments).sort(); }

// rest参数的写法 const sortNumbers = (...numbers) => numbers.sort();

### 16、创建没有原型的空对象

const obj=Object.create(null)//{}的原型是Object


### 17、yarn.lock文件的作用
 - 1、规定每个模块的版本
 - 2、规定每个模块使用的源