JavaScript的数组

JavaScript中的数组具有相当的灵活性,除了能存储数据外,还提供了一系列的属性和方法。因为JavaScript本身是一个弱类型语言,故其数组不会限制存放数据的类型。

定义的四种方式:

  1. var x = new Array(); //空数组
  2. var x = new Array(size); //指定长度
  3. var x = new Array(element0,element1...,elementn); //指定初始值
  4. var x = [element0,element1...,elementn]; //指定初始值

读取数组可用其下标,从0开始,当超出下标边界,不会报错,而是返回一个undefined。

改变数组长度的三种方式:

  1. 未超出数组长度的下标赋值
  2. 改变数组的length属性
  3. 通过数组的相应方法,如unshift、push。

数组的常用方法:

  • array.concat():参数放一个或多个数组,使它们连接在一起。
  • array.join():将数组所有元素放入一个字符串中,并以指定参数的形式作为分隔符进行分隔。
  • aray.unshift():向数组开头添加一个或多个元素,并返回新的长度。
  • array.push():向数组末尾添加一个或多个元素,并返回新的长度。
  • array.shift():向数组开头删除一个元素并返回它。
  • array.pop():向数组末尾删除一个元素并返回它。
  • array.splice(m,n,'x'):一个参数m,返回指定的前m+1个元素;两个参数m、n,从下标m开始,删除n个元素;三个参数m、n、'x',从下标m开始,删除n个元素,并在后面加上‘x'。
  • array.isArray():判断array是否是数组。
  • array.reverse():颠倒数组中元素的顺序。
  • array.sort():按ASCll码排序。

数组的排序是按ASCII码,故对于有负数的数字,排序并不准确,下面会举例。故可通过传入一个方法——比较器,通过返回值绝对是顺序还是逆序的数字排序。正数表示正序排序,负数表示逆序排序,0表示不排序。

var a = [1,5,8,2,6,-5,-1];
alert(a.sort())
//-1,-5,1,2,5,6,8
var a = [1,5,8,2,6,-5,-1];
a.sort(function (x, y) { //x和y是数组的两个元素
return x>y; //x>y返回正数,正序排序
})
alert(a);
//-5,-1,1,2,5,6,8
 var a = [1,5,8,2,6,-5,-1];
a.sort(function (x, y) { //x和y是数组的两个元素
return x<y;//x<y返回负数,逆序排序
})
alert(a);
//8,6,5,2,1,-1,-5
var a = [1,5,8,2,6,-5,-1];
a.sort(function (x, y) { //x和y是数组的两个元素
return x==y; //x=y,返回0
})
alert(a);
//1,5,8,2,6,-5,-1

JavaScript的hash结构

JavaScript出支持数组外,还支持键值对格式的数据,一般称为hash,类似于python中的字典。

定义方式:

  1. var x = {}; //定义空hash
  2. var x = {'key1':'value1','key2':'value2'...};//指定初始化

读取数据方式:

  1. x.key
  2. x['key1']

若读取没有的键值对,会返回undefined

hash的遍历:通过for in循环。

 var a = {'name':'wl','age':66,'sex':'boy'};
for (key in a){
var value = a[key];
console.log(value);
}
//wl 66 boy

JavaScript的函数

JavaScript的函数分为有名函数和匿名函数以及函数表达式。有名函数就是普通定义的有名函数,加括号就执行,不加括号可以充当一个事件函数。匿名函数一般不单独出现,一般充当事件函数。函数表达式的特点就是后面加上括号就立即执行,匿名函数可以通过一些措施变成函数表达式。

函数定义:

function a(){ //有名函数
//函数体
} function(){ //匿名函数
//函数体
}

匿名函数可以通过在函数前加 + 、- 、!、~、()变成函数表达式。

函数返回值默认返回undefined

实参与形参数目可以不同,当形参大于实参,未收到的实参会默认为undefined,值为NaN;当形参小于实参时,多余的实参接收不到不会报错。

不定参的关键字是arguments,在函数体内,通过下标获取传递来的实参,还可通过属性length获取实参的长度。

 sum(1,2,3,4,5,6,7,8,9,10);
function sum() {
console.log(arguments.length);
console.log(arguments[2]);
var x = 0;
for(var i = 0 ; i < arguments.length ; i++){
x += arguments[i];
}
console.log(x);
}

JavaScript代码的执行顺序

理解JavaScript的执行规律很重要,在这点上它与其他语言不同。先给一个小例子。

alert(a);
var a = 5;
alert(a);

上面代码执行并不会报错,先打印一个undefined,再打印一个5,很多初学者对于这点会很奇怪。其实只要理解其执行规律就能明白了。JavaScript的执行分两步,先从上而下解析一次,再从上而下执行一次。

  1. 解析:解析主要看var 、function(参数 ),对于var,解析时定义一个变量,并给他初始化一个undefined,但不赋值,对于函数,只定义函数,但不执行函数体。如果变量和函数名重名,函数优先。
  2. 执行:解析完后,从上而下执行。碰到函数执行,会产生一个新的作用域,在函数体内再次先做解析,后执行。

JavaScript详解(三)的更多相关文章

  1. .NET DLL 保护措施详解(三)最终效果

    针对.NET DLL 保护措施详解所述思路完成最终的实现,以下为程序包下载地址 下载 注意: 运行环境为.net4.0,需要安装VS2015 C++可发行组件包vc_redist.x86.exe.然后 ...

  2. Android 之窗口小部件详解(三)  部分转载

    原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...

  3. WebSocket安卓客户端实现详解(三)–服务端主动通知

    WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...

  4. logback -- 配置详解 -- 三 -- <encoder>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  5. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

  6. Python操作redis字符串(String)详解 (三)

    # -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1.SET 命令用于设置 ...

  7. pika详解(三)SelectConnection及其他Connection

    pika详解(三)SelectConnection及其他Connection   本文链接:https://blog.csdn.net/comprel/article/details/94661147 ...

  8. Android WebView 开发详解(三)

    转载请注明出处   http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...

  9. Day03 javascript详解

    day03 js 详解 JavaScript的基础 JavaScript的变量 JavaScript的数据类型 JavaScript的语句 JavaScript的数组 JavaScript的函数 Ja ...

  10. View绘制详解(三),扒一扒View的测量过程

    所有东西都是难者不会,会者不难,Android开发中有很多小伙伴觉得自定义View和事件分发或者Binder机制等是难点,其实不然,如果静下心来花点时间把这几个技术点都研究一遍,你会发现其实这些东西都 ...

随机推荐

  1. skLearn 支持向量机

    ## 版权所有,转帖注明出处 章节 SciKit-Learn 加载数据集 SciKit-Learn 数据集基本信息 SciKit-Learn 使用matplotlib可视化数据 SciKit-Lear ...

  2. 算法实战(六)Z 字形变换

    一.前言 之前因为第五题最长回文字符串需要使用到dp解法,所以我花了很长的时间来研究dp(因为每天又要上班,加上这段时间事情比较多,所以花了三个星期才搞定),好不容易算入了个门,有兴趣的同学可以看看我 ...

  3. java嵌套循环练习

    打印一个等腰三角形 package com.lv.jj; import java.util.Scanner; public class DemoDy { public static void main ...

  4. python3 --- unittest单元测试框架

    1.unittest结构 1.单元测试的框架 unittest(python自带,无需额外安装)+接口2.文件,命名时,千万不要写成unittest这样的模块名,会报错的3.功能测试 1)写用例 Te ...

  5. 996.ICU 爆发,互联网从业者难逃“高薪陷阱”

    从 3 月 27 日开始,截止本文发稿,GitHub 上面的项目 996.ICU 的 Star 数量已经超过 18 万,这场由程序员发动的轰轰烈烈的公开反对 996 工作制的运动,早已突破互联网圈层而 ...

  6. POJ1833 & POJ3187 & POJ3785

    要是没有next_permutation这个函数,这些题觉得还不算特别水,不过也不一定,那样可能就会有相应的模板了.反正正是因为next_permutation这个函数,这些题包括之前的POJ1226 ...

  7. 从华硕裁员、分拆业务看传统PC企业转型到底有多难?

    近段时间,华硕的处境可谓"冰火两重天".一方面,华硕正式发布ROG游戏手机.这款手机以超强性能和华丽外观,让游戏玩家群体为之沸腾.即使最高售价高达12999元,还是有不少玩家趋之若 ...

  8. Oracle:文字与字符串不匹配

    执行方法的时候,方法在本地跑是正常,到测试环境报错,错误代码为 ADD_MONTHS(to_date(nvl(T2.EXEC_TIME,t1.DISTRIBUTE_TIME+1),'yyyy-mm-d ...

  9. git 公钥 ssh

    1 安装 git 2 桌面右击  Git Bash Here 3 命令: git config --global user.name "git账户" git config --gl ...

  10. Thread.currentThread()和this的区别

    1. Thread.currentThread()可以获取当前线程的引用,一般都是在没有线程对象又需要获得线程信息时通过Thread.currentThread()获取当前代码段所在线程的引用. 2. ...