js书写技巧1

1、对象属性定义

js对象可以理解为键值对桶,也可以理解成Java中Map,属于Key-value形式。定义属性时可以通过字面量设置属性,如:

var obj = {
    "user-name":'张三',
    "age" : 15
}

也可以通过中括号([])形式设置属性,如:

var obj = {}
obj['user-name'] = '张三'
obj['age'] = 15

第三种属性设置设置属性值与其他语言类似,通过”.”进行属性赋值,如:

var obj = {}
//obj.user-name = '张三'//报错Uncaught ReferenceError:Invalid left-hand side in assignment
obj.user_name = '张三'

对于以上三种方法赋值,各有优缺点。第1、2种,对象属性设置灵活,可以设置成任意字符串,甚至是js预留字段以及可以不符合js变量定义规范
最后一种赋值方式,与其他面向对象语言写法类似,开发人员容易接受,但是属性名必须严格遵守js变量命名规范。

建议为了规范代码,尽量使用最后一种属性设置方式。

属性取值与以上类似,可以通过中括号或者“.”进行属性值获取

2、js对象取值防御式开发

  • 防止获取到值存在undefined情况,可以设置默认值
var obj = {
    "userName":'张三',
    "age" : 15
}

var username = obj.userName//张三
var birthday = obj.birthday // undefined
var birthday = obj.birthday || '未填写'
  • 防止对象是undefined,获取属性值报错
var obj = undefined
var username = obj.userName//Uncaught TypeError: Cannot read property 'userName' of undefined
var birthday = obj && obj.userName//undefined

3、对象字面量的原型对象

所有通过对象字面量创建的对象都连接到Object.prototype.

4、减少全局变量污染

  • 创建唯一一个全局变量,相当于一个容器,将所有函数与变量定义到全局容器中
var MYAPP = {}
MYAPP.stooge = {
    "first-name" : Jone
}

5、函数(方法)调用中的this

如果函数是某个对象的属性,我们将这个函数称为对象的方法,当调用对象的某个方法时,方法体中的this关键字指向的是对象本身,而如果直接调用函数,this指向的是全局作用域。

6、arguments

arguments与this是函数调用时,默认传入参数,其中arguments并不是一个数组,只是一个类数组的数据结构。arguments拥有一个length属性,但是没有其他数组方法

var sum = function(){
    var i,sum = 0;
    for(i = 0 ; i < arguments.length ; i++){
        sum += arguments[i]
    }
    return sum'
}

7、js函数返回值

js与其他语言不通,所有函数(方法)都有返回值,即使直接return也会有返回值”undefined”.

var testReturn = function(){
    console.log("testReturn end")
    return;
}
testReturn();//undefined

8、js异常处理

异常处理主要是解决那些干扰正常流程运行的事故,防御式编程的习惯是尽可能早的发现问题并处理问题。如下代码,做两个数的加法,需要校验是否数字,如果不是,将异常抛出。

var add = function (a,b){
    if(typeof a != 'number' || typeof b != 'number'){
        throw{
            name: 'TypeError',
            message: 'add needs numbers'
        }
    }
    return a + b;
}

通过throw语句可以中断当前逻辑的执行,并且会抛出一个exception对象。在js中exception对象必须包含一个用来标识异常类型的“name”属性和一个异常描述的“message”属性。

对于抛出的异常,我们可以捕获也可以不处理,直接向上抛出,直到调用栈顶层如果都未被捕获,则阻断当前代码运行逻辑,直接跳出。

var try_it = function(){
    try{
        add("seven","one")
    }catch(e){
        console.log(e.name + "-------" + e.message)//TypeError-------add needs numbers
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值