记录一些js方法,持续更新...
1、console.log(!!" " + !!"" - !!false || "未通过")
字符串中有空格,为真,一个感叹号为假,前面有两个感叹号,是假之后再为真,结果是true,true是1,所以结果是1;
空字符串,无值,为假,前面一个感叹号为真,两个感叹号则为假,为真之后又为假,结果是false,false是0;
false前面一个感叹号为真,两个感叹号为假,,为真之后又为假,结果是false false是0
1 + 0 - 0 || “未通过” 中间是或运算符,所以有一个为真,就不继续往下进行,结果为1。
2、window.a || (window.a = "1")
console.log(window.a)
正常情况下是从前往后看:或运算符,前面是假,window.a是undefined,未定义,是假,所以继续往后执行,赋值,错误,
正确的执行步骤是:先执行括号里面的代码块,也就是先赋值,再看前面的window.a,此时window.a就是真的了,打印得到1,原因:括号的优先级最高,先执行括号里面的在执行或运算。
3、巧用&&和||,使代码更简洁,当我们有一个需求:需要用到多个if else 进行条件筛选,例如:
let a = 0; if(cont > 20){ a = 10 }else if(cont > 10){ a = 5 } else if(cont > 5){ a = 1 }else { a = 0 }
let cont = 4
let a = cont > 20 ? 10 : cont > 10 ? 5 : cont > 5 ? 1 : 0
通过判断cont的大小来给a赋值,这样会显得代码冗长,所以简写之后就可以写成这样
let a = (cont > 20 && 4)|| (cont > 10 && 5) || (cont > 5 && 1) || 0
注:在js逻辑运算中,0、''、null、false、undefined、NaN都会判为false,其他为true。
4、记录js平滑过渡,回到顶部
widow.scrollTop({
top:0,
behavior: 'smooth',
})
5、js方法,将一个数组按照n个一份,分成若干数组
function group(array,subGroupLength){ let index = 0 let newArray = [] while(index < array.length){ newArray.push(array.slice(index,index += subGroupLength)) } return newArray }
6、vue-cli3.0配置接口代理,新建一个vue.config.js,存放在根目录中
module.export = { devServer:{ //设置主机地址 host:"localhost" host:"0.0.0.0", port:"8080", // 端口号 open:true, // 配置自启动浏览器 https:false, // 是否允许使用https访问 https:{type:Boolean} hotOnly:true, // 是否热加载 proxy:{ "/api":{ target:"http://XXX.XXX.X:8091", // 源地址 changeOrigin:true, // 改变源 ws:true//websocket支持 是否代理websocket secure:false, pathRewrite:{"^/api":""} } } }}
7、记录一下html锚点,锚点应用非常广泛,我们常见的技术型网站,就经常用到:
①最常用用法:
a标签超链接的href属性对应下面div元素的id值,a的href与非a标签的id值一致就可以形成锚点,
点击a标签的”锚点测试1“,”锚点测试2“会跳转到与之对应的id的div区域(实际上就是dom元素的上移跟下移,对应id的div会尽量靠近浏览器的顶部)
也可以将a标签设置为锚点跳转目标
<a href="#miaodian">锚点测试a> <a name="miaodian">a>
8、filter的使用
①获取名字为Tom并且性别为公的猫
et arr = [
{ name: "lucky", gender: "母" },
{ name: "Jack", gender: "公" },
{ name: "Rose", gender: "女" },
{ name: "Tom", gender: "公" },
{ name: "Tom", gender: "女" },
];
let result = arr.filter((item) => { return item.name == "Tom" && item.gender == "公" })
返回结果为:
filter方法的返回值为符合过滤条件的元素。
②数组去重的用法:
let arr = [ 5,3,6,6,5,5,8,9,8,4,2,'hello','world','hello' ];
console.log(arr.filter((item,index,self) => self.indexOf(item) == index));
③去掉数组空字符串、null、undefined、0
let arr = [ 0,2,5,null,4,undefined,10,'hello','','end' ]; console.log(arr.filter(item => item));
9、数组扁平化处理
方法一: 递归
var arr=[[1,2,3],4,5,[6,7,[8,9]]]; function bianping(arr){ var res=[]; for(var i=0;i){ var item=arr[i]; if(Array.isArray(item)){ console.log(item); res=res.concat(bianping(item)); }else{ res.push(item); } } return res; } console.log(bianping(arr));
递归加reduce方法
function bianping(arr){ return arr.reduce((res,item) =>{ return res.concat(Array.isArray(item) ? bianping(item) : item) },[]) } console.log(bianping(arr));
方法二:toString方法
arr.toString().split(",");
方法三:数组内置方法
arr.flat(Infintity); // 多维转换