语法错误
//变量命名不规范
var 1 = 1;
var 1ab = 1;
//关键字赋值
new = 5;
function = 1;
//基本语法错误
var a = 5:
引用错误
//变量或者函数未被声明
test();
console.log(a);
//给无法被赋值的对象赋值的时候
var a = 1 = 2;
var a = 1;
console.log(a) = 1;
范围错误
//数组长度赋值为负数
var arr = [1,2,3];
arr.length = -1;
console.log(arr);
//对象方法参数超出可行范围
var num = new Number(66.66);
console.log(num.toFixed(-1));
类型错误
//调用不存在的方法
123(); //此处Js引擎会判断出123根本就不会是一个函数
//数组长度赋值为负数
var arr = [1,2,3];
arr.length = -1;
console.log(arr);
//对象方法参数超出可行范围
var num = new Number(66.66);
console.log(num.toFixed(-1));var obj ={}
obj.say();//这里为对象的属性调用后加了个执行函数所以不可以
//实例化原始值
var a = new 'string';
var a = new 123;
转换编码字符
var myUrl = 'http://www.baidu.cin?name=艾小野';
var newUrl = encodeURI(myUrl);//http://www.baidu.cin?name=%E8%89%BE%E5%B0%8F%E9%87%8E
转换为URI
var newNewUrl = decodeURI(newUrl);
console.log(newNewUrl);
URI错误
var str = decodeURI('sdfadf');
eval函数执行错误
eval('var a= c; console.log(e);')
eval可以快速将json字符串转换为json对象
人为实例化构造函数自定义错误
var error = new SyntaxError('代码错误了');
var error = new RefernceError('指向错误');//等等错误都可以
var error = new Error();//总的Error
try{
if(){
throw '这里出错了'
}
}catch(e){
console.log(e);
var errorTip = {
name : '数据传输失败',
errorCode : '10010'
}
}finally{
}//如果try中出错不影响catch和finally和外部的代码执行
'use strict'//全局严格
function test(){
'use strict';//局部严格
}
var test =(function(){
'use strict'//局部严格
})();
最早的多人开发方式 use strict后with无法使用,(with是可以改变作用域的)
var namespace = {
header : {
Jenny : {
a : 1,
b : 2
}
}
}
with(namespace.header.Jenny){
console.log(a);//1
}
组件化
var initxxx= (function(){
})();
现在的方式
webpack
严格模式中calle 不能用 caller也不能
严格模式下必须要var 变量 不var报错
严格模式下函数中的this不指向window
function test(){
console.log(this);
}
test.call(1);
严格模式下输出的是1
非严格输出的就是包装类Number了 不赋值的话指向的则为window
function test(a, a){
console.log(a);
}
test(1, 2);
严格模式下函数的参数不能重复
var obj = {
a : 1,
a : 2
}
console(obj.a)
严格模式下对象的命名是不允许重复的,但是不报错输出2
eval('var a =1; console.log(a)');
console.log(a);//报错的
严格模式eval是有自己的作用域的,非严格模式是不报错的能输出出来
function test1(){
var a = 1;
return function(){
a++;
console.log(a);
}
}
var test =test1();
test();
test();
test = null;//闭包解除引用
test();
标记清除则为除去全局变量和挂载的AO以外有离开环境标记的清除
function test(){
var a =0; //进入环境
}
test();//a 离开环境
function test(){
var a =new Object(); //a=1
var b =new Object(); //b=1
var c=a; //a++ =2
var c=b; //a-- =1 b++ =2
//循环引用
a.prop=b; b=2;
b.prop=a; a=2;
//卸载掉
a= null;
b=null;
}