记录一些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); // 多维转换