javascript易错知识

1、在try-catch语句中,finally子句是可选的,当包含finally子句的时候,无论try还是catch语句中的return语句都会被忽略。所以,我们在使用finally子句的时候,要想清楚我们希望代码如何执行。

 function fn () {
     try {
         a++;
     }
     catch(error) {
         console.log("in catch");
         return;
     }
     finally {
         console.log("in finally");
     }
 } 

 fn();   // in catch   in finally

2、jvascript中void是一个操作符,该操作符指定要计算一个表达式并且返回undefined。譬如underscore中就用void 0代替undefined。

3、undefined 并不是保留词(reserved word),它只是全局对象的一个属性,在低版本 IE 中能被重写。所以直接使用undefined可能是不靠谱的。那么如何保证能保证取到undefined的值呢?可以采用如下两种方案:

jquery版:

(function( window, undefined ) {
    //...
})( window );

这样写的优势:

  • window和undefined都是为了减少变量查找所经过的scope作用域。当window通过传递给闭包内部之后,在闭包内部使用它的时候,可以把它当成一个局部变量,显然比原先在window scope下查找的时候要快一些。(原来的window处于作用域链的最顶端,查找速度慢)
  • 在jquery压缩版本jquery.min.js中可以将局部变量window替换成单个字母,减小文件大小,提高加载速度
  • 将undefined作为参数传递给闭包,因为没给它传递值,它的值就是undefined。所以可以得到确切的undefined。

underscore版:

_.isUndefined = function(obj) {
    return obj === void 0;
}

4、

时间: 2024-10-21 20:55:09

javascript易错知识的相关文章

Javascript易错知识点

? JS易错知识点总结: == 和 === 的区别: ==:判断两个变量的值是否相等. ===:判断两个变量的类型和值是否都相等,两个条件同时满足时,表达式为True. switch中break的作用: 如果一个case后面的语句,没有写break,那么程序会向下执行,而不会退出: 例如:当满足条件的case 2下面没有break时,case 3也会执行 1 var num = 2; 2 switch(num){ 3 case 1: 4 alert('case 1'); 5 break; 6 c

JavaScript易错知识点整理

本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES6的知识点. JavaScript知识点 1.变量作用域 var a = 1; function test() { var a = 2; console.log(a); // 2 } test(); 上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2. var a

JavaScript 易错知识点整理

本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES6的知识点. JavaScript知识点 1.变量作用域 var a = 1;function test() { var a = 2; console.log(a); // 2} test();上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2. var a =

关于js的易错知识

1 var arr = []; 2 for(var i = 0;i<2;i++){ 3 arr[i]=function(){ 4 console.log(i);//这里由于内部没有定义i,根据函数链它会往上一层寻找最近的作用域下的i 5 } 6 } 7 arr[0](); 8 arr[1](); 上述输出的都是2. 为什么呢?其实上述的操作是给aar数组添加了两个函数,所以自然可以用数组加下标和()执行函数. 易错点是人们常常以为第一个输出的是0,第二个函数输出的是1. 但是由于函数执行是自上而

JavaScript易错点

JavaScript知识点1.变量作用域   var a = 1;function test() {    var a = 2;     console.log(a); // 2} test();   上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2.   var a = 1;function test2() {    console.log(a); // undefined     var a = 2;} test2();   上方的函数作用域中虽然声明并

Javascript 易错的知识点

忘记var的副作用(Side Effects When Forgetting var) 隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力. ●通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的. ●无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的. 这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性.属性是可以通过delete操作符删除的,而变量是不能的: // 定义三个全局变量 var globa

js基础知识易错点(一)

最近替另一个项目招人,要求基础知识好,随便问了一些基础题,发现了一些易错的点,总结一下. 1.判断一个空数组 var arr = []; 1)JSON.stringify(arr) == "[]" 2)arr instanceof Array && arr.length == 0 3)Array.prototype.isPrototypeOf(arr) && arr.length == 0 测试一个对象是否在另一个对象的原型链上 注意:此处要注意,单纯判

javascript的基础知识及面向对象和原型属性

自己总结一下javascript的基础知识,希望对大家有用,也希望大家来拍砖,毕竟是个人的理解啊 1.1 类型检查:typeof(验证数据类型是:string) var num = 123; console.log(typeof num); // 1.2 in 运算符 作用:判断指定属性是否存在于指定的对象中. 如果指定的属性存在于指定的对象中,则 in 运算符会返回 true. 语法: 属性 in 对象 返回值:true 或者 false 示例: var obj = { age: 18 };

细节!重点!易错点!--面试java基础篇(一)

今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的. 2.任何静态代码块都会在main方法之前执行. 3.java程序的初始化顺序:原则:静态优先于非静态,且只初始化一次:父类优先于子类:按照成员定义顺序初始化.例顺序:父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数. 4.