javascript变量 数组 对象

时间:2022-12-23 19:35:59
一 变量
1.全局变量和局部变量
在JavaScript中同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用var声明一次。这种变量类型不固定的语言称为动态语言,与之对应的静态语言,如java,赋值时类型不匹配会报错。

全局变量:(1)在方法外部声明的变量(2)方法内部,没有加var关键字声明的变量
局部变量:方法内部,使用var声明的变量
<script type="text/javascript">
var a=3; //全局变量
function test(){
var a=2; //局部变量
alert(a);
}
test();
</script>
结果:

javascript变量 数组 对象

如果注释掉var a=2;

<script type="text/javascript">
 
var a=3; //全局变量
function test(){
//var a=2; //局部变量
alert(a);
}
test();
</script>

结果:

javascript变量 数组 对象

若将程序改为:

<script type="text/javascript">
function test(){
c=5; //相当于全局变量
}
alert(c);
test();
</script>

结果为:

javascript变量 数组 对象

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、Date...)
3.typeof操作符:用来判断数据类型
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>
结果为:
javascript变量 数组 对象
javascript变量 数组 对象
javascript变量 数组 对象
javascript变量 数组 对象
其中,push()函数会向数组中添加元素,并会返回新数组的长度
<script type="text/javascript">
    var arr=[1,false,2,"dfr"];
    var obj=arr.pop();
    alert(arr);
    alert(obj);
</script>
结果:
javascript变量 数组 对象

javascript变量 数组 对象

javascript变量 数组 对象
javascript变量 数组 对象
其中,pop()函数可以从数组的尾部移除一个元素,并返回移除的元素值
shift()函数从头部移除一个元素,unshift()函数从头部插入多个元素,并返回新数组的长度
<script type="text/javascript">
    var arr=[1,2,4,6,3];
    arr.splice(1, 2,3,4,5);
    alert(arr);
</script>
结果:
javascript变量 数组 对象
javascript变量 数组 对象
其中,splice()的第一个参数表示起始位置,第二个参数表示截取的个数,第三个参数以后表示要追加的新元素
若是只有两个参数,arr.splice(1,2);结果为
javascript变量 数组 对象
javascript变量 数组 对象
程序若改为:
<script type="text/javascript">
    var arr=[1,2,4,6,3];
    arr.slice(2,4);
    alert(arr);
</script>
结果:
javascript变量 数组 对象
javascript变量 数组 对象
slice()函数截取范围:左闭右开区间,不操作数组本身,返回截取的内容,而splice方法会操作数组本身
修改程序:
<script type="text/javascript">
    var arr=[1,2,4,6,3];
    var result=arr.slice(2,4);
    alert(result);
</script>
结果:
javascript变量 数组 对象
javascript变量 数组 对象
<script type="text/javascript">
    var arr1=[1,2,3];
    var arr2=[2,3,4];
    var result=arr1.concat(arr2);
    alert(result);
</script>
结果:
javascript变量 数组 对象
javascript变量 数组 对象
同理,concat()合并粘贴,不操作数组本身
<script type="text/javascript">
    var arr1=[1,2,3];
    var result=arr1.join('-');
    alert(arr1)
    alert(result);
</script>
结果为:
javascript变量 数组 对象
javascript变量 数组 对象
javascript变量 数组 对象
javascript变量 数组 对象
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);       //name,age...
        alert(person(attr)); //Bob,20...
    }
 

javascript变量 数组 对象的更多相关文章

  1. javascript之数组对象与数组常用方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 学习笔记:Javascript 变量 包装对象

    学习笔记:Javascript 变量 包装对象 如下代码,可以输出字符的长度. var str = "Tony"; str.length; 这时再试试以下代码,返回是 undefi ...

  3. JavaScript 浅析数组对象与类数组对象

    数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() sh ...

  4. JavaScript类数组对象参考

    JavaScript和DOM中有很多类数组对象,它们有以下特点 1.有length属性 2.可以使用[]通过下标访问 3.部分类数组对象使用[]访问成员时不只可以使用下标,还可以使用id或name 4 ...

  5. javascript 类数组对象

    原文:https://segmentfault.com/a/1190000000415572 定义: 拥有length属性,其他属性(索引)为非负整数(对象中的所有会被当做字符串来处理,这里你可以当做 ...

  6. JavaScript中数组对象详解

    Array对象即数组对象用于在单个变量中存储多个值,JS的数组是弱类型的,所以允许数组中含有不同类型的元素,数组元素甚至可以是对象或者其他数组. 创建数组的语法 1.Array构造器 1.var li ...

  7. foreach-- for循环的增强型:for&lpar;类型 变量 &colon; 数组对象&rpar; &lbrace; 使用变量 &rcub;

    /* * foreach:增强for循环,一般用于遍历集合或者数组 * 格式: * for(元素的类型 变量 : 集合或者数组对象) { * 可以直接使用变量; * } 注意:在增强for循环中不能修 ...

  8. JavaScript之数组对象

    Array类型是ECMAScript中最常用的类型了. 一.声明方式 1.使用Array构造函数 var arr1 = new Array(); 如果预先知道要保存数组的数量, 也可以给构造函数传递该 ...

  9. 在Javascript中数组对象&lpar;json&rpar;里元素相同的操作

    1.数组对象元素相同,分组显示   let arry = [ { expensedate: '2018/09/29', amount: 1, type: '交通费' }, { expensedate: ...

随机推荐

  1. ldconfig报错 :libstdc&plus;&plus;&period;so&period;6&period;0&period;18-gdb&period;py不是一个elf文件

    今天安装wxWidgets,输入ldconfig竟然提示 /usr/lib64/libstdc++.so.6.0.18-gdb.py 不是一个elf文件,开头魔数错误 摸不着头脑,上网搜了一下,有说是 ...

  2. MySQL字段操作与数据处理

    一,对字段的操作 1.拼接字段:Concat()函数 多数DBMS使用 + 或者 || 来实现拼接,而MySQL使用 Concat() 函数来实现拼接. 实例: Concat()函数拼接时加上的字符需 ...

  3. (十五)The Search API

    Now let’s start with some simple searches. There are two basic ways to run searches: one is by sendi ...

  4. Sping AOP Capabilities and Goals

    Spring AOP是用纯的java实现的.不需要任何个性的实现过程.Spring AOP不需要控制类加载器,并且它适用于Servlet容器或者应用服务器. Spring AOP当前只支持方法执行的连 ...

  5. LeetCode 237&period; 删除链表中的节点

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

  6. Linux网络编程:socket文件传输范例

    基于TCP流协议的socket网络文件传输Demo: 实现:C语言功能:文件传输(可以传任何格式的文件) /********************************************** ...

  7. 【概念原理】四种SQL事务隔离级别和事务ACID特性

    摘要: SQL事务隔离级别和事务的ACID特性 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性.   事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UNCOMMITTED.R ...

  8. 添加Godaddy二级域名子域名方法

    我们在申请注册了Godaddy域名后,如果需要开通二级域名,方法简单只需要在Godaddy添加二级域名(子域名)只要在域名管理后台添加A记录或CNAME别名(Aliases)即可.但我们如果需要添加二 ...

  9. 二维码Data Matrix的解码实现&lpar;zxing-cpp&rpar;

    二维码Data Matrix的介绍可以参考http://blog.csdn.net/fengbingchun/article/details/44279967 ,以下是通过zxing-cpp开源库实现 ...

  10. 记一次RMI的调用数据失误

    这两天在测试一个Spring RMI接口的时候,出现了个奇怪的问题.Server端返回的数据,到了客户端出现了属性丢失的情况. 类继承体系 .客户端里面定义在ClassA中的属性全部为null. 分析 ...