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...
        }
     
  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/lyy-2016/p/5625448.html
Copyright © 2011-2022 走看看