javascript学习笔记[1]--变量

时间:2022-08-27 07:57:23

     每天收获一点,慢慢地就多了。

     今天开始正式学习javascript,虽然以前都有一些涉及,但是没有好好的系统的学上一编,趁这段寒假,多学一点总是好的,坚持就是胜利,废话不多说了。

     1. 数据类型:

      简单(基本)数据类型:Boolean, Number,String,Undefined,Null。

      复杂数据类型:Array,Object等。

     2.区分undefined 和 null

         Null:

          (1) null 意味着没有值,即缺少数据。

          (2)包含 null 的变量包含“无值”或“无对象”。换句话说,该变量没有保存有效的数、字符串、boolean、数组或对象。可以通过给一个变量赋 null 值来清除变量      的内容。 

          (3) Null类型只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回"object"的原因(null是一种特殊的object)

         Undefined:

          (1) undefined常量用于尚未初始化的变量或未初始化的动态对象属性的特殊值(未定义的值和定义未赋值的为undefined)

           (2)   Undefined类型只有一个值,即特殊的undefined(注意大小写,用的时候也不用加引号,人家不是string)。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined

      实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true,但是使用全等运算符(===)对null和undefined进行比较时,比较结果为不相等。

     3. 区分等于(==)和全等于(===)

         重点:等于(==)的情况下只要值相同就返回True;

                   而全等(===)的时候需要值和类型都要匹配才能返回True.具体看堆栈的区别及逻辑等和逻辑全等

      4.变量的声明:

             4.1 变量的声明必须使用var。

a=10;

           这仅仅是给全局对象创建了一个新属性(但它不是变量)。“不是变量”并不是说它不能被改变,而是指它不符合ECMAScript规范中的变量概念,所以它“不是变量”,这个也是我的盲区,我是参考了汤姆大叔的博客才知道的。详细分析参考深入理解JavaScript系列(12):变量对象(Variable Object)

          4.2 变量声明提升

                这个比较好理解,执行器会将所有的变量声明移到语句的顶部,如果是在函数的内部声明局部变量,那么就会将变量声明提升到函数体内的最顶部。这个只是针对声明语句。

         4.3 变量的传值和传址

              传值:

var i = 10;
var j = i;   //输出 10
alert(i);
i = 30;
alert(j);   //输出10




function sqrt(x){
    return x*x;
}

var inValue = 3;
var outResult = sqrt(inValue);
alert(outResult);    //输出 9
alert(inValue);       //输出 3

          传址:

var myArray = ["tom", "dick"];
var newArray = myArray;
alert(newArray[1]);      //输出dick
myArray[1] = "jack";
alert(newArray[1]);       //输出jack

        4.4 内存使用规则-堆和栈

            堆:为复杂数据类型分配空间,例如数组,Object对象,运行时动态的分配内存,速度慢。

            栈:基本类型的变量和对象的引用,速度快,可以共享(这边数据共享还有些不理解。)’

           总而言之,javascript堆不需要程序代码显式地释放,会有自动的垃圾回收机制。但是为了提高程序性能,还是可以自己释放的,最常用的方法就是对其赋值为null。

            注意点:

var str = new String("abc");  //对象存放在堆中
var str = "abc";            //栈中存放值“abc”和对值的引用
//推荐使用第二种创建方法

           堆栈的区别及逻辑等和逻辑全等

            

//只是比较栈中的值,不管逻辑等于还是逻辑全等于运算都返回true,可以看出str1.str2指向同一个值、
var str1 = "abc";
var str2 = "abc";
alert(str1 == str2);       //true
alert(str1 ===str2);     //true

//实际比较的是堆中的内容,不管是逻辑等于还是逻辑全等于运算都返回false、可以看出str1,str2指向的不是同一个对象。
var str1 = new String("abc");
var str2 = new String("abc");
alert(str1 == str2);      //false
alert(str1 === str2);  //false

//比较堆中和栈中的值,进行逻辑等于运算的时候,会首先将变量转成相同的数据类型,然后进行对比,所以返回true,但是逻辑全等于会对数据类型进行比较,看是否引用了同一个数据,返回false
var str1 = new String("abc");
var str2 = "abc";
alert(str1 == str2);      //true
alert(str1 === str2);     //false

              今天先写这么多吧,其实还有好多地方需要学习的,比方typeof,数据类型转换,array,object。

              有关变量的知识很多都是参考了网上一些别人写得博客,以下附上链接:

                 深入理解JavaScript系列(12):变量对象(Variable Object)
                 Javascript 中 null、NaN和undefined的区别
                 JavaScript之数据类型
                 javascript定义对象
                 javascript动态添加、修改、删除对象的属性和方法

             以上全部都属个人原创,请大家转载的时候附上原创链接: http://www.cnblogs.com/tonylp