zoukankan      html  css  js  c++  java
  • 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、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>
    结果为:
    其中,push()函数会向数组中添加元素,并会返回新数组的长度
    <script type="text/javascript">
        var arr=[1,false,2,"dfr"];
        var obj=arr.pop();
        alert(arr);
        alert(obj);
    </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 result=arr1.concat(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);       //name,age...
            alert(person(attr)); //Bob,20...
        }
     
  • 相关阅读:
    DTD
    JVM-学习笔记持续更新
    MySQL用limit代替SQL Server :top
    正则表达式&&Java文本复杂操作
    JVM核心——JVM运行和类加载全过程
    java动态编译——tools.jar问题
    java-基础
    github for windows 简单的客户端托管代码
    【javascript dom读书笔记】 第九章 CSS-DOM
    【精通css读书笔记】 第八章 布局
  • 原文地址:https://www.cnblogs.com/lyy-2016/p/5625448.html
Copyright © 2011-2022 走看看