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
}
}