es5初探

标题 es5相关 错误类型 严格模式 try …catch

// Error:name六种:1.EvalError:eval()的使用和定义不一致 2.RandgeError:数值越界 3.ReferenceError:非法或不能识别的引用数值(没声明就调用的变量) 4.SyntaxError:语法解析错误 5.TypeError:操作数类型错误 6.URIError:URI处理函数使用不当(一般地址错误)

//es3 es5最通用 现在浏览器更新基于es3.0方法、es5.0的新增方法 两者冲突的用es3.0的方法
// es3.0和es 5.0冲突的部分
// es 5.0 严格模式 ,那么两者冲突就使用es 5.0,否则使用es3.0

// 启动es5.0严格模式 在页面逻辑最顶端,前面可以有空格,不能用代码

// 两者方式1.全局:写在最顶端 2.局部:函数内部最顶端,只在这个函数执行时生效 推荐使用局部
“use strict”;
function test(){
// “use strict”;也可以写在函数逻辑顶端,只在执行这个函数生效,函数外面不生效
console.log(arguments.callee)//typeError 报错,es3.0可以,es5不可以
}
test()

// 灵活度变低,错的几率变低
//es5严格模式禁止 1.with方法不可以用 2.arguments.callee禁止 (不能输出)3.function.caller禁止(不能输出) 下面的test.caller不行

// es5严格模式变量必须声明再赋值  var a=b=5,不能直接写,b没声明

// es5严格模式下,局部this(函数里面的this,不再默认指向window),必须赋值,赋什么值就是什么,默认为空,但是在new 函数(),指向对象;在全局下this还是指向window
// es3函数形参两个相等不报错,es5严格模式下报错;对象里面重复属性不报错,后面的值覆盖上面的

var obj={
    name:'obj'
}
var name='window'
function test(){
    var name='aaa'
    with(obj){
        console.log(name);//obj  原本这里的作用域链AO是靠近他的那个,这里直接先指向obj,然后往上找
        
    }
}
test()



   var org={
    dp1:{
       jc:{
           name:'asd',
           age:12
       }
    },
    deng:{

    }
}
with(org.dp1.jc){
    console.log(name)//直接指向指定对象
}
// 但是改变了作用域链,效率变慢,es5严格模式禁止



function test(){
    'use strict'
    console.log(this)//直接运行 undefined   下面new 输出test {}
}
test()
new test()
test.call({})//{}相当于this赋值

// 防止报错 因为有些错误没法控制,可能是前后端数据传输过程出问题,还没传到等等,为了不让报错代码影响下面代码
// 这个代码try报错代码及之后不执行,try外面不受影响,有点只会让try错误后面的代码终止,外面代码不影响
try {
console.log(1);//1
console.log(b);//在try不报错,不执行
console.log(‘c’)//不报错,不执行
} catch (e) {//error e.message+’’+e.name保存到e
console.log(e.name+’:’+e.message)//ReferenceError:b is not defined try没有错catch里面不执行,报错的情况下抛出错误
}
console.log(3)//3 不受try里面错误影响,执行

猜你喜欢

转载自blog.csdn.net/weixin_44022586/article/details/88561324
ES5