JavaScript对象遍历与比较

  • JS写多了发现对于一些基本类型的相关处理还不够熟练,这里总结下Js里的基本类型和相关类型的一些常见操作。基本的流程控制语句也与其他语言类似,三种控制结构,顺序,判断,循环。javaScript基本类型包含 字符串、数字、布尔、数组、对象、Null、Undefined,都是弱类型,变量声明为var,也可以不用var声明,这样运行并不会出错,只是变量作用的值域不同而已,关于具体不同于闭包等相关内容属于高级特性有兴趣再补充这里暂不讨论。JS没有类似于Java里复杂的集合类,但是集合类也无非是一些基本的数据类型封装起来的,因此JavaScript在底层数据结构还是提供的比较完善,JS里的null与undefined感觉没太多的区别,可以来验证一下逻辑比较结果:
   console.log('比较null与undefined')
   console.log (null == undefined)

返回结果true
其实null是代表变量指向的对象为空,而undefined为变量没有被初始化。undefined为没有被初始化。

  1. 字符串类型常见的length为求长度,indexOf定位字符串中某一个指定的字符首次出现的位置,match()为匹配某个字符串,如果匹配返回该字符串,否则返回null,replace(oldString, newString)替换对应字符串.
  2. 数字类型可以为整数小数或则科学计数的方式。
  3. 对象有很多种,常用的为数组对象和普通对象,数组对象的初始化方式可以是var array = [],也可以是var array = new Array()。普通对象通过大括号定义var ob = {“name”,”micro”},也可以采用var ob = new Object(),动态的添加元素ob.name = “micro”。关于数组与对象的遍历:
   // 定义对象类型
   var o1 = {"id":1, "name":"testName"}
   var o2 = {"id":1, "name":"testName"}

   // 遍历对象属性
   console.log('遍历对象如下')
   for (var x in o1) {
       console.log('key : ' + x + '   value :' + o1[x])
   }

   // 遍历数组
   console.log('遍历数组如下')
   var array = ["test",2,4,5,7,"test2"]
   for (var x in array) {
       console.log(x)
   }
遍历对象如下
key : id   value :1
key : name   value :testName
遍历数组如下
0
1
2
3
4
5

当我们比较两个对象的时候:

 // 定义对象类型
   var o1 = {"id":1, "name":"testName"}
   var o2 = {"id":1, "name":"testName"}
   // 直接判断对象返回false
   console.log(o1 == o2)
    var o3 = o2
   // 指向引用指向的对象,返回true
   console.log(o3 == o2)

这里类似Java里的比较概念,如果我们需要返回的是比较两个对象的属性相等则返回两个对象是相等的那么我需要自己编写一个函数:

function isObjectEquals(o1,o2) {
    try {
            var size1 = 0
        var size2 = 0
        for (var x in o1) {
            size1 ++
        }
        for (var x in o2) {
            size2 ++
        }
        // 对象属性长度一致
        if (size1 != size2) {
            return false
        }
        // 遍历对象属性
        for (var x in o1) {
            if (o1[x] != o2[x]) {
                return false
            }
        }
        return true
    } catch (err) {
        console.log(err.stack)
        return null
    }
}

// 调用
 // 如果通过属性比较两个对象相等
   var isEquals = isObjectEquals(o1,o2)
   console.log(isEquals)

这样就可以比较两个对象的属性值
使用一个好的编辑器让事半功倍,我们不清楚Object接口提供了访问对象属性长度的函数我们可以Debug去查询,最终查到了在对象的hasOwnProperty.length可以去获取长度,笔者使用的微软一款编辑器VSCode。

最近一直觉得学习一门脚本语言是十分重要的,在Python和JavaScript之间考虑了一段时间,刚好项目当中需要来编写nodeJs部分,所以我就主动去承担这部分责任,希望能对这门语言有更加深入的理解。
JavaScript最开始是基于浏览器的脚本语言,脚本语言的好处就是比较轻量与灵活,没有严格的类型限值虽然在安全上一直被诟病,但是也带来灵活快速轻量的特点,尤其是nodeJs里的异步阻塞机制可以有效的提高CPU执行效率。近两年在各大编程语言排名上JavaScript也比较抢眼,无论是在传统的web领域各种相关类库和框架层出不穷甚至在VR和机器学习等热门领域也有非常好的前景,但是单纯的JavaScript语言还不够通用,还是无法与传统Java几十年的社区贡献和各大厂商支持去抗衡,因此我个人觉得掌握一门重量级编译语言和至少一门脚本语言是比较好的。值得一提的是Python这门“胶水语言”在大数据领域和网络编程的方向发展势头不错。
最近做的nodeJS层用的框架包括express,co等等,持久层采用sequelize,sequelize虽然避免了自己去写SQL语句但受制于编辑器和语法,笔者还是感觉跟Java的Mybatis还是很难使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值