0%

JavaScript

基础

判断true和false

  • 如果逻辑对象无初始值或者其值为 0、-0、null、””、false、undefined 或者 NaN,那么对象的值为 false。否则,其值为 true(即使当自变量为字符串 “false” 时)!
  • 但是不要想当然的理解为 0 == null(结果为false) ,1 == “abc”(结果是false), null == undefined (结果为false)
  • 不过 0 == false , 1 == true(结果都为true)

任意类型的值转换为布尔类型的语法糖

1
!!val

一个!是取非 再一个!又取非 相当于把这个数据转换为boolean类型了

JavaScript

Array.some()

1
2
3
4
5
6
7
const array = [1, 2, 3, 4, 5];

// checks whether an element is even
const even = (element) => element % 2 === 0;

console.log(array.some(even));
// expected output: true

沙箱

参考文章

JS判断两个对象内容是否相等

https://www.jianshu.com/p/7407bd65b15d

自定义sleep

1
2
3
4
const sleep = function (time) {
let startTime = new Date().getTime() + time * 1000
while (new Date().getTime() < startTime) {}
}

判断字符包是否包含中文

1
/.*[\u4e00-\u9fa5]+.*$/.test(str)

ES5

ES5中bind()函数

ES6

ES6教程

http://es6.ruanyifeng.com/?search=%E8%A7%A3%E6%9E%84&x=0&y=0

ES6解构赋值

http://es6.ruanyifeng.com/?search=%E8%A7%A3%E6%9E%84&x=0&y=0#docs/destructuring#%E5%AF%B9%E8%B1%A1%E7%9A%84%E8%A7%A3%E6%9E%84%E8%B5%8B%E5%80%BC

Google JavaScript Style Guide

https://google.github.io/styleguide/jsguide.html

let vs var

在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。

1
2
3
4
{ 
var i = 9;
}
console.log(i); // 9

ES6新增的let,可以声明块级作用域的变量。

1
2
3
4
{ 
let i = 9; // i变量只在 花括号内有效!!!
}
console.log(i); // Uncaught ReferenceError: i is not defined

https://www.jianshu.com/p/bd7f6cf64e41

const vs var vs let

https://tylermcginnis.com/var-let-const/
简而言之:
1、var的作用域是函数级别,默认值是undefined;
2、let的作用域是代码块级别,未赋值就引用会抛出ReferenceError
3、const的作用域和let一样,但是const相当于是一个常量,赋值之后不能直接修改,不然会抛TypeError,但是如果是其指向的值是对象,那么可以修改对象的子属性,如:

1
2
3
4
5
6
7
const person = {
name: 'Kim Kardashian'
}

person.name = 'Kim Kardashian West' // ✅

person = {} // ❌ Assignment to constant variable.

export

export vs export default

其中export和export default最大的区别就是export不限变量数 可以一直写,而export default 只输出一次 而且 export出的变量想要使用必须使用{}来盛放,而export default 不需要 只要import任意一个名字来接收对象即可。

export const

export const 可以导出多个对象,import的时候用{}承接。

let

let obj = {}, content; todo

ES6中import * as xxx from ‘xxx’的作用

import * as obj from ‘xx’ 这种写法是把所有的输出包裹到obj对象里

BOM(浏览器窗口对象模型)

1
2
3
4
/*保存的数据用于浏览器的一次会话(session),当会话结束(通常是窗口关闭),数据被清空*/
window.sessionStorage.setItem(name, JSON.stringify(obj));
/*保存的数据用于浏览器的一次会话(session),当会话结束(通常是窗口关闭),数据被清空*/
window.sessionStorage.setItem(name, JSON.stringify(obj));

Code specification

firm url
aotu https://guide.aotu.io/docs/js/code.html
腾讯 https://www.kancloud.cn/digest/code-guide/42604
alibaba https://www.cnblogs.com/whitewolf/p/4491447.html?spm=a2c4e.10696291.0.0.5e2f19a4kuyhbl#types

es6之扩展运算符…

对象中的扩展运算符(…)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中

变量的扩展

1
2
let bar = { a: 1, b: 2 };
let baz = { ...bar }; // { a: 1, b: 2 }

等同于:

1
2
let bar = { a: 1, b: 2 };
let baz = Object.assign({}, bar); // { a: 1, b: 2 }

如果用户自定义的属性,放在扩展运算符后面,则扩展运算符内部的同名属性会被覆盖掉。

1
2
let bar = {a: 1, b: 2};
let baz = {...bar, ...{a:2, b: 4}}; // {a: 2, b: 4}

引用数据类型时,修改拷贝后的对象会影响到被拷贝的对象:

1
2
3
4
5
6
7
8
let obj1 = { a: 1, b: 2, c: {nickName: 'd'}};
let obj2 = { ...obj1};
obj2.c.nickName = 'd-edited';
console.log(obj1); // {a: 1, b: 2, c: {nickName: 'd-edited'}}
console.log(obj2); // {a: 1, b: 2, c: {nickName: 'd-edited'}}
————————————————
版权声明:本文为CSDN博主「astonishqft」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/astonishqft/java/article/details/82899965

数组的扩展

filter() 数组过滤

判断数组的每个元素

1
2
// 判断task.selected是在为true
let newArr = this.list.filter(task => task.selected)

去掉数组空字符串、undefined、null

1
let newArr = arr.filter(item => item)

数组去重

1
let newArr = arr.filter((x, index,self)=>self.indexOf(x)===index)

或者:

1
2
3
4
var arr  = [1,2,1,'1',null,null,undefined,undefined,NaN,NaN]
let res = Array.from(new Set(arr));
//or
let newArr = [...new Set(arr)]

数组查询返回元素

1
2
3
const result = arr.find(item=>{
return item.itemCode === itemCode
})

Promise

Promise.all和Promise.race

https://www.jianshu.com/p/7e60fc1be1b2
还有最新的Promise.any,不过这个公司的架构中没有引进

babel

可以增加了一个babel插件,现在支持
result = 0 ?? result 这种写法

类似 0 || result,
|| 左侧条件是undefined,null,0
?? 左侧条件是undefined,null