日期:2014-05-16  浏览次数:20376 次

JavaScript系统学习问题发现与总结(一)

??????? 虽然对JavaScript面向对象编程有一定的掌握,在工作中也是遇到问题解决问题,没有系统的把JavaScript学习一遍,基础掌握的并不是特别的牢固。刚好宿舍现在断网了,晚上有时间抱着月影的《JavaScript王者归来》仔细的研读下,

收获还是很大的。接下来的时间会把自己以前不太太清楚的东西都慢慢记下来。

?

?????? 在编程的世界里面,每种语言都会涉及到操作数的引用,JavaScript也不例外,不同在于在JS中可以直接声明变量指向函数,在C/C++虽然可以通过指针的方式来达到这样的目的,但毕竟还是不灵活的,而java中试完全行不同的(听说以后也要在java中加入闭包这样的话,也能实现)。下面来简单分析下JavaScript里面的值引用和地址引用。

?

??????

//先看下代码
var a="abc";
var b="abc";
var d=5;
var e=5;
var i={"a":a,"b":b};
var k={"a":a,"b":b};

alert(a==b);//结果为true
alert(d==e);//结果为true
alert(i==k);//结果为false

?

??

var a=3;
var b=a;
b++;
alert(b);
alert(b==a);//结果为false ,证明值引用的方式会因=操作产生一个副本
var i={"a":3,"b":3};
var k=i;//变量k也引向对象{"a":a,"b":b};
alert(k==i);//结果为true
k.a=4;
alert(k==i);//结果仍为true
alert(i.a);//结果为4,k引用对象的改变也引起i引用对象的改变,证明在地址引用中对象还是一个,=操作并没有产生副本

?

通过上面的显示结果很明显的看出,JavaScript中的基本类型是按值直接引用的,也就是说变量中直接存放的就是赋予变量的值,而对于变量对对象的引用里面是存放的是对象的引用地址,虽然对象的属性内容是一样的但是他们的引用地址是不同的,这也就是i==k是fasle的原因。不过有一点需要注意,变量对字符串的引用虽然引用的是字符串存放的地址但是比较的却是字符串的内容而不是变量存放的地址值。

???

??? PS:前天还为匹配数字的问题而特意写了一个正则表达式,但今天发现JavaScript里面已经有一个原生的只是函数了:

isFinite(obj),直接就能得出obj是不是数字类型的!看来JavaScript的基础是很重要的,掌握好基础才能真正的掌握JS!