Javascript声明和使⽤变量
1.1变量的声明
要在程序中使⽤变量,就必须从声明变量学起,因为Javascript语法与我们基础的其他程序语⾔声明变量的⽅法略有不同,但是Javascript语法的变量应⽤⾮常强⼤,使⽤也⾮常简单。
1.1.1声明和命名变量
要使⽤变量,就必须声明变量,可以使⽤关键字var来声明,如果不使⽤var关键字可能会导致程序不易阅读。变量区分⼤⼩写。
基本的规则:var 变量名;
(1)声明⼀个变量名:var firstName;
(2)声明多个变量名,⽤逗号分隔:var firstName,middleName,lastName;
(3)在声明变量时直接为变量赋值:var firstName = "chengmingxiaowu";
(4)⼀条语句声明多个变量,同时为这些变量赋值:var firstName="chengming",middleName="xiao",last
Name="wu";
1.1.2变量和标识符的命名规范
变量名必须是⼀个js标识符,遵循以下标准命名规则
(1)第⼀个字符必须为字母,下划线(_)或者美元符号($);
(2)后⾯可以跟字母、下划线、美元符号、数字,最好不要包含其他符号。
(3)变量名不能是⼀个关键字或者逻辑常量。(true,null,false,underfind)
(4)变量名在其作⽤范围内必须是唯⼀的。
tip:使⽤错误的变量名在执⾏时就会导致错误,但是⼤多数浏览器不会提⽰这种语法错误。
1.1.3
数据类型可分为简单数据类型和复杂数据类型
⼀、简单的
数据类型取值范围
Boolean true或false。
js也会在适当的时候将值转换为1和0。
Number 双精度浮点型。
两个数字常量:
(1)Infinity表⽰⽆穷⼤(2)NaN表⽰⾮数字
String表⽰⼀个字符序列,⼀般使⽤双引号或者单引号包围。除了内存限制以外,对其长度没有限制。Underfind
Underfind数值类型仅有⼀个值,与类型名相同,注意区分⼤⼩写。
当定义了⼀个变量⽽未为该变量赋值时,该变量就是underfind.
Null Null数值类型仅有⼀个值,与类型名相同,注意区分⼤⼩写。
当⼀个⽤于引⽤某个对象的变量不再使⽤时,就可以为该变量赋值为null,从⽽该变量就不再引⽤那个对象了,该变量的值就是空引⽤。
使⽤情况:
(1)声明变量还没有接收到值;
(2)声明变量不再包含值;
(3)作为函数的返回值,表明很熟没有可以返回的值;
(4)作为函数的⼀个参数,表明省略了⼀个参数。
⼆、复杂数据类型
(1)Array数据类型
Array为数组变量,数组可以是连续数字索引的数组也可以是符合数组,并且数组元素的数据类型也可以多种多样。
(2)Object数据类型
Object是属性的集合,属性是⽤来描述对象特性的。
1.1.4⾃定义常量和内建常量
常量也是变量,但它是⼀个⽤于表⽰其值永远不会改变的变量。
⽤户可以使⽤const关键字⾃定义常量;开发可以使⽤con_或者⼤写所有的常量名来区分常量和变量。(IE中的常量定义不⽣效,所以不推荐⾃定义的常量。)
以下是常量表:
常量说明
false⼀个表⽰与true相反的唯⼀逻辑值,表⽰逻辑假
Infinity表⽰正⽆穷⼤ IEEE-754值
-Infinity表⽰负⽆穷⼤的IEEE-754值
NaN⼀个预定义的变量
null⼀个可以分配给变量的或由未提供数据的函数返回的特殊值。
true⼀个表⽰与false相反的唯⼀逻辑值,表⽰逻辑真
undefind ⼀个特殊值,通常⽤于指⽰变量尚未赋值。
将underfind⽤于不同的类型转换函数时,结果也不相同:
(1)String 返回的是 underfind, 转换为字符串。
(2)Nunber返回的是NaN;
(3)Object返回的值为新的Object实例;该实例的属性如果没有初始化,那么其属性值为underfind,⽽⾮null, 因为Object并⾮动态类。
(4)向类型变量赋予值underfind时,改值转换为该数据类型的默认值。
Tip:null==underfind是true;null===underfind是false;
1.2在程序中使⽤变量
1.2.1为变量赋值和更改变量值:
1、为变量值赋值,1.1中已经介绍,注意点:
1)在位现有的变量重新赋值时,⽆需使⽤var关键字;
2)不⽤var关键字申明的隐式变量具有全局作⽤,是全局变量;
2、变量值包含引号:若在变量值中包含引号(双引号或者单引号),就必须⽤转义符(\);但是如果⼆者交替出现,则⽆需使⽤‘\’;如:var myName="my name is \"chengmingxiaowu\",thank you!";
var myName="my name is 'chengmingxiaowu',thank you!";
var myName='my name is "chengmingxiaowu",thank you!';
3、更改变量值:只需为该变量重新赋值即可。
var myName = "chengmingxiaowu";
myName = "xiaowu";
4、数据类型的转换:只需为变量赋⼀个不同类型的值即可。
5、变量的默认值:如果定义了⼀个变量,但是没有赋值,则运⾏环境会为其指定⼀个默认值,这个默认值为underfind。
1.2.2使⽤变量和获取变量值
变量的值可以相互传递,也可以作为函数的参数被处理,或者被直接显⽰在⽹页上。
1、变量申明的顺序:先申明后使⽤;不申明就会报错。
2、变量申明的提升:先使⽤后申明,申明会⾃动提升到最顶部,但是却不能将赋值语句提到顶部,所以会返回该变量对应数据类型的默认值。(虽合法,但不推荐。)
1.3变量的传值和传址
1.3.1传值变量-按值传递
简单数据类型是按值进⾏传递的,这种传递类型被成为传值。当按值传递时,将在计算机内存中分配⼀块空间并将原复制到其中,是相互独⽴的实体。
var i=10;
var j=i;
alert(j)//输出15
i=30;
alert(j)//输出15
1.3.2传址变量-按引⽤传递
复杂数据类型可以包含⼤量和复杂的信息,所以属于此类型的变量并不包含实际的值,它包含的是对值的引⽤,这种传递类型称为传址。
(这种引⽤类似于指向变量名的别名,在⼀些程序语⾔中称为指针)
var myArry = ["chengming","xiaowu"];
var newArry = myArry;
alert(newArry[1])//返回xiaowu
myArry[1]="xiaowushi";
alert(newArry[1])//返回xiaowushi
1.4内存使⽤规则-堆和栈
堆和栈都是运⾏时内存中分配的⼀个数据去,因此也被成为堆区和栈区,但⼆者存储的数据类型和处理速度不同。
(1)堆(heap):⽤于复杂数据类型的分配空间,例如数组对象,Object对象。它在运⾏时动态分配内存的,因此存取速度⽐较慢。
(2)栈(stack):主要存放⼀些基本类型的变量和对象的引⽤。优势速度快,数据共享。缺点:栈中数据⼤⼩与⽣存期是确定的,缺乏灵活性。
1.4.1 栈的使⽤规则:
var a=3 ⾸先会在栈中创建⼀个变量为a的引⽤,然后查栈中是否有3这个值,没有到,就将3存放进来,然后指向a,接着处理var
b=3,在创建完b的引⽤变量后,直接查栈中是否有3这个值,因为存在,所以直接指向b 。这样就出现a和b同时指向3的情况。
此时如果a=4,那么js引擎就会重新搜索栈中是否有4,如果没有,存放起来,并a指向4,如果已经有了,就指向这个地址,因此a值的改变不会影响到b值。
1.4.2堆的使⽤:
当创建数组时,就会在堆内创建⼀个数组对象,并且在栈内创建⼀个对数组的引⽤。
javascript全局数组 js堆不需要程序代码来显⽰的释放,因为堆是由⾃动的垃圾回收来负责的,各种引擎各不相同,但最基本的原则是,如果占中不存在对堆中某个对象堆的引⽤,那么就会认为该对象已经不再需要,在垃圾回收时就会清除该对象占⽤的空间。
因此,在不需要的时候应该对对象的引⽤释放掉,以利于垃圾回收。这样可以提⾼性能。最常⽤的⽅法就是为其赋值null。
1.4.3易犯的错误
在堆和栈的使⽤问题上,最易犯错误的就是String的使⽤,例如:
var str1 = new String("abc"); //存放在堆中
var str2 = "abc";//存放在栈中
下⾯进⾏逻辑运算来深⼊了解以下:
(1)存放在栈中
var str1 = "abc";
var str2 = "abc";
alert(str1==str2);//true
alert(str1===str2);//true
(2)存放在堆中
var str1 = new String("abc");
var str2 = new String("abc");
alert(str1==str2);//false
alert(str1===str2);//false
(3)⼀个存放在堆中,⼀个栈中
var str1 = "abc";
var str2 = new String("abc");
alert(str1==str2);//true 在进⾏逻辑等于运算时,会⾸先将变量转换成相同的数据类型,然后进⾏对⽐。
alert(str1===str2);//false
1.5数据类型的转换
在js中,有时进⾏数据运算前会对数据类型进⾏转换,分为两种
(1)强制数据转换。
可以使⽤全局函数进⾏数据类型转换,这些函数包括parseFloat()、parseInt()、Number()、String()和Boolean()函数。(2)隐式数据类型转换,⽐如赋值的时候。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论