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