码迷,mamicode.com
首页 > Web开发 > 详细

js 开发过程中经验及总结

时间:2019-02-22 18:09:40      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:this   enum   解构   webview   strong   默认值   json   相互   family   

 

一   let 和 var 作用域

   1  普通用法

    for (var i = 0; i < 5; i++) {

      console.log(i);

    }

 

    for (let i = 0; i < 5; i++) {

      console.log(i);

    }

   

    结果都是: 0,1,2,3,4

 

 

 

    2  箭头函数(()=>{})里面使用

   1  var

   var a=6;

 

  for(var a=0;a<4;a++){//var是全局的,同名的变量后面的会覆盖前面的。

  console.log(a); //正常的输出0,1,2,3

 

  setTimeout(()=>{//箭头函数本身没有this的引用,里面用的变量和方法都是指向外层的。

  console.log(a); //直接写外层附近定义的变量即可,不要用this. 由于var是全局的,箭头函数里面引用都是同一个a,输出的结果都是一样的 4

  console.log(this.a);//  this. 表示windows的对象, windows里面根本没有a. , 所以 这里输出 undefined

  },0);

  }

  console.log(a); // 箭头函数外使用变量也是 直接使用即可,不用this.  由于var同名的变量后面的会覆盖前面的,这里输出 4

  console.log(this.a); // this. 表示windows的对象, windows里面根本没有a. , 所以 这里输出 undefined. ; 只有顶部data:{}下定义的字段,用的时候可以this.data.字段。

 

 

2  let 

let b=6;

 

for(let b=0;b<4;b++){//let作用域是当前块级, 同名定义的不会相互影响覆盖

console.log(b); //正常的输出0,1,2,3

 

setTimeout(()=>{//箭头函数本身没有this的引用,里面用的变量和方法都是指向外层的。

console.log(b);  //直接写外层附近定义的变量即可,不要用this. 由于let是当前块的,箭头函数里面引用都是不同的b ,输出结果会是 0,1,2,3 

console.log(this.b); //this. 表示windows的对象, windows里面根本没有b. , 所以 这里输出 undefined

},0);

}

console.log(b);//箭头函数外使用变量也是 直接使用即可,不用this.   由于是let定义,所以不会覆盖。 输出最外层的

console.log(this.b);// this. 表示windows的对象, windows里面根本没有b. , 所以 这里输出 undefined. ; 只有顶部data:{}下定义的字段,用的时候可以this.data.字段。

 

 

 

总结处理{}的方法:???????

1 Object.keys(); object.values();

 /** 通用处理 默认值 0

    item--表示传入的某条记录对象{}

    MapKey--表示要处理 默认值 0 的字段集合

    MapKeyDefault---默认处理成0

    一般用于处理 一层层级的数据记录{}; 更深的层级需要自己单独提出来处理,创建新字段(平级)

    */

    dealItemVal(item = {}, MapKey = [], MapKeyDefault = 0) {

 

        let obj = {}

 

        //转成数组 --字段名称和值 -------object方法在andorid里面无法执行!!!

        let ks = Object.keys(item),

            vs = Object.values(item);

 

        //遍历key--map

        ks.forEach((value, index) => {

 

            let huo = "";

 

            //需要把默认值处理成0 字段;其他的字段若false 默认值是“”

            MapKey.includes(value) && (huo = MapKeyDefault)

 

            //有字段非false 否则显示huo默认值!

            obj[value] = vs[index] || huo;

 

        })

 

        return obj;

    },

 

使用::::

 //精简通用处理方式。。。

        // let to0 = [

        //     "courseCount",

        //     "examCount",

        //     "finishCourseNum",

        //     "finishExamNum",

        //     "percent"

        // ];

        // let dealValue = tools.dealItemVal(item, to0); 

 

        // let newItem = {

        //     ...other,

        //     stu_lastLearnCourseId,

        //     stu_assign,

 

        //     ...dealValue

        // };

 

        return newItem;

 

 

 

##补充文章 语句:

object方法在andorid里面无法执行(是因为wkwebview的内核偏低导致)!!!

 

 

 

方法2:

Const { 字段1 ,字段2,字段3,字段4……}=item;

 

 

????

3: 方法传递解构函数 和  默认参数值 。。。。。

????

 

????补充es6语法

Assign 合并对象,every循环可以中断,push pop unshit shit不能变量接收,foreach不能变量接收,for of返回item, for in返回index ,

Search !=-1 判断有没有,splice截取替换集合,contect合并数据,,,, 空{} []都是true, 1 和 -1都是true ,0是false…

???

 

 

 

 

2 判断空{}空[]

可以for in 

 

也可通过json.StringFy()转成字符串比对==‘{}’

 

 

5.区分是集合{}还是对象[]?  无法判断是空[] 还是空{}

Object.prototype.toString.call(loginRes.serverInfo) === "[object Object]")

第二个大写。。。

 

 

3  扩展属性方法prototype

  //声明----如果有此自定义 contains 直接用最好

    // Array.prototype.contains = function (needle) {

    //     for (i in this) {

    //         if (this[i] == needle) return true;

    //     }

    //     return false;

    // }

 

    // //直接使用

    // var x = Array();

    // if(x.contains(‘foo‘)) {

    //     // do something special

    // }

 

 

 

js 开发过程中经验及总结

标签:this   enum   解构   webview   strong   默认值   json   相互   family   

原文地址:https://www.cnblogs.com/softwarelanguagebs/p/10419723.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!