JavaScript 小知识

1.var 变量

 <script type="text/javascript">
       var a = "hong";
       var fun = function () {
           var a = "aa";
           console.log(a);
       }
       console.log(a);  //hong  
       fun();           //aa 
    </script>

有局部变量与全局变量同名,在方法内优先使用局部变量

 <script type="text/javascript">
       var a = "hong";
       var fun = function () {
           a = "aa";
           console.log(a);
       }
       console.log(a);  //hong  
       fun();           //aa 
       console.log(a);  //aa
    </script>

可以看出在方法中对全局变量进行了修改

 <script type="text/javascript">   
       var fun = function () {
           a = "aa";
           console.log(a);
       }
      // console.log(a);  //hong  
       fun();           //aa 
       console.log(a);  //aa
    </script>

在这里a没有var修饰,它是隐式的全局变量

<script type="text/javascript">
       var a = "hongda";
       function fun() {
           console.log(a);  
           var a = "aaa";
           console.log(a);   
       }
       fun();   //undefined    aaa
    </script>

在这里要注意var的声明,在方法内部不管在什么地方声明,都跟它们在函数的顶部声明一样

  function fun() {
           var a = b = c = 0; //这样错误,b,c都是隐式的全局变量了
           var aa, bb,
               cc = "hongda",
               dd = 10;      //这样是好的
       }

 查看全局变量与隐式全局变量

 <script type="text/javascript">
       var a = "hongda";
       b = "bb";  
       console.log(a);  //hongda
       console.log(b);  //bb
       delete (a);
       delete (b);
       console.log(a);  //hongda
       console.log(b);  //b不存在了,已经被删除了
    </script>

在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过delete操作符删除的,而全局变量是不能的,但全局变量也是window的属性

为什么隐式全局变量可以被删除,而全局变量不可以被删除?

 <script type="text/javascript">
       function f() {
           this.aa = "hongda";
       }
       f.prototype.bb = "bb";
       var ff = new f();
       console.dir(ff);
       delete (ff.aa);
       delete (ff.bb);
       console.dir(ff);
    </script>

可以发现函数内部的aa被删除了

隐式全局变量可以被删除是不是这样的关系,我也不清楚?

 js函数的声明:

  function fun() {
           console.log("fun");
           console.log(typeof fun);
       }

       var f = function () {
           console.log("fun2");
       }

       var f2 = function fu() {
           console.log("fun3");
           console.log(typeof fu);
       }
       fun();
       f();
       f2();
       console.log(typeof fu);

大概就是这样的三种方式,

第一种,直接声明一个函数

第二种,先声明一个变量f,再声明一个匿名函数,将匿名函数赋值给变量f,赋值以后f的类型才为function

第三种,先声明一个变量f2,再声明一个函数fu,只是这个fu只能在该函数的内部使用,不能在外部使用

2.for循环

<script type="text/javascript">
       var array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
       for (var i = 0; i < array.length; i++) {
           console.log(i + ":" + array[i]);
       }
       var obj = { name: "hongda",
           age: 27,
           country: "china",
           say:function(){alert("fd");}
       }
       for (var o in obj) {
           console.log(o + ":" + obj[o]);
       }
       for (var i in array) {
           console.log(i + ":" + array[i]);
       }
    </script>

一般应用时,使用for in 遍历对象内部的属性,使用for()来遍历数组,for in 也可以用来遍历数组,因为数组也是个对象,但for in 遍历对象属性是不一定是顺序的,所以数组还是使用for()好

3.hasOwnProperty

就是去除对象内部从相对应的prototype中获取的属性

 http://www.cnblogs.com/hh54188/archive/2013/05/12/3074358.html

http://www.cnblogs.com/TomXu/archive/2011/12/28/2286877.html

原文地址:https://www.cnblogs.com/hongdada/p/3141951.html