javascript变量数组对象
⼀变量
1.全局变量和局部变量
在JavaScript中同⼀个变量可以反复赋值,⽽且可以是不同类型的变量,但是要注意只能⽤var声明⼀次。这种变量类型不固定的语⾔称为动态语⾔,与之对应的静态语⾔,如java,赋值时类型不匹配会报错。
全局变量:(1)在⽅法外部声明的变量(2)⽅法内部,没有加var关键字声明的变量
局部变量:⽅法内部,使⽤var声明的变量
<script type="text/javascript">
var a=3; //全局变量
function test(){
var a=2; //局部变量
alert(a);
}
test();
</script>
结果:
如果注释掉var a=2;
<script type="text/javascript">
var a=3; //全局变量
function test(){
//var a=2; //局部变量
alert(a);
}
test();
</script>
结果:
若将程序改为:
<script type="text/javascript">
function test(){
c=5; //相当于全局变量
}
alert(c);
test();
</script>
结果为:
c虽然是全局变量,但是要先执⾏函数test(),才能执⾏到c。也就是说,javascript是由上⽽下执⾏的。
2.变量提升
JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:
function foo() {
var x = 'Hello, ' + y;
alert(x);
var y = 'Bob';
}
foo();
语句var x = 'Hello, ' + y;并不报错,原因是变量y在稍后申明了。但是alert显⽰Hello, undefined,说明变量y的值为undefined。这正是因为JavaScript引擎⾃动提升了变量y的声明,但不会提升变量y的赋值。
对于上述foo()函数,JavaScript引擎看到的代码相当于:
function foo() {
var y; // 提升变量y的申明
var x = 'Hello, ' + y;
alert(x);
y = 'Bob';
}
由于JavaScript的这⼀怪异的“特性”,我们在函数内部定义变量时,请严格遵守“在函数内部⾸先申明所有变量”这⼀规则。最常见的做法是⽤⼀个var申明函数内部⽤到的所有变量。
⼆数据类型
1.基本数据类型:Number,Boolean,String,Undefined,Null
Number:整数,⼩数,NAN,Infinity(正⽆穷),-Infinity(负⽆穷)
Undefined:表⽰变量声明但是未赋值
Null:表⽰⼀个空的对象引⽤
例:var a=1/0;并不会报错,会返回Infinity
2.引⽤类型:Object类(如对象、数组、RegExp、)
var a=10;alert(typeof a);
页⾯显⽰的是number
其中,基本类型按值访问,引⽤类型按引⽤访问。
三数组
js数组类似于java容器,长度可变,元素类型也可以不同
<script type="text/javascript">
var arr=[1,false];
var result=arr.push(2,true,"abc");
alert(arr);
alert(result);
</script>
结果为:
其中,push()函数会向数组中添加元素,并会返回新数组的长度
<script type="text/javascript">
var arr=[1,false,2,"dfr"];
var obj=arr.pop();
alert(arr);
alert(obj);javascript数组对象
</script>
结果:
其中,pop()函数可以从数组的尾部移除⼀个元素,并返回移除的元素值
shift()函数从头部移除⼀个元素,unshift()函数从头部插⼊多个元素,并返回新数组的长度
<script type="text/javascript">
var arr=[1,2,4,6,3];
arr.splice(1, 2,3,4,5);
alert(arr);
</script>
结果:
其中,splice()的第⼀个参数表⽰起始位置,第⼆个参数表⽰截取的个数,第三个参数以后表⽰要追加的新元素若是只有两个参数,arr.splice(1,2);结果为
程序若改为:
<script type="text/javascript">
var arr=[1,2,4,6,3];
arr.slice(2,4);
alert(arr);
</script>
结果:
slice()函数截取范围:左闭右开区间,不操作数组本⾝,返回截取的内容,⽽splice⽅法会操作数组本⾝
修改程序:
<script type="text/javascript">
var arr=[1,2,4,6,3];
var result=arr.slice(2,4);
alert(result);
</script>
结果:
<script type="text/javascript">
var arr1=[1,2,3];
var arr2=[2,3,4];
var at(arr2);
alert(result);
</script>
结果:
同理,concat()合并粘贴,不操作数组本⾝
<script type="text/javascript">
var arr1=[1,2,3];
var result=arr1.join('-');
alert(arr1)
alert(result);
</script>
结果为:
join()⽅法在每个元素之间加⼊内容,也不操作数组
sort()⽅法正序排序,reverse()⽅法倒序排序
四. strict模式
javaScript在设计之初,为了⽅便初学者学习,并不强制要求⽤var申明变量。这个设计错误带来了严重的后果:如果⼀个变量没有通过var申明就被使⽤,那么该变量就⾃动被申明为全局变量。在同⼀个页⾯的不同的JavaScript⽂件中,如果都不⽤var申明,恰好都使⽤了变量i,将造成变量i互相影响,产⽣难以调试的错误结果。
为了修补JavaScript这⼀严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运⾏的JavaScript代码,强制通过var申明变量,未使⽤var申明变量就使⽤的,将导致运⾏错误。启⽤strict模式的⽅法是在JavaScript代码的第⼀⾏写上: 'use strict';
这是⼀个字符串,不⽀持strict模式的浏览器会把它当做⼀个字符串语句执⾏,⽀持strict模式的浏览器将开启strict模式运⾏JavaScript。
五.对象
javaScript的对象是⼀种⽆序的集合数据类型,它由若⼲键值对组成。JavaScript⽤⼀个{...}表⽰⼀个对象,键值对以xxx: xxx形式申明,⽤,隔开。键都是字符串类型,值可以是任意数据类型。如定义⼀个person对象:
var person={
name:'Bob',
age:20,
hasCar:true
};
获取⼀个对象的属性:person.name;
由于JavaScript的对象是动态类型,你可以⾃由地给⼀个对象添加或删除属性:
person.sex='male';
若想遍历⾥⾯的属性,则可以使⽤:
for(var attr in person){
alert(attr);      //
alert(person(attr)); //
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。