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. NumPy 基于数值区间创建数组

    来源:Python Numpy 教程 章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基 ...

  2. canvas背景粒子动态变化动画

    var canvas = document.getElementById("cas"); var ctx = canvas.getContext("2d"); ...

  3. vim使用技巧(常用指令)

    1. vim基础操作 vim是从 vi 发展出来的一个文本编辑器 .代码补完.编译及错误跳转等做了一些增强 1.1 进入编辑模式 命令 含义 i和I i在光标前插入,I在行首插入. a和A a在光标后 ...

  4. 使用BP爆破有token值的密码(10.17 第二十三天)

    此次爆破使用的网站是DVWA来进行测试 工具:Burp suite 1.进去DVWA网站,选择高级安全等级,再进入到Brute Force(爆破)模块,假设此时已知账号是admin的情况下我们不知道密 ...

  5. 通过while循环一步步实现九九乘法表

    # 打印#做出@列的效果height = int(input("height: ")) #用户输入一个高度 num_height = heightwhile num_height ...

  6. HDU 1576:A/B

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. java.sql.Date转换

    ---恢复内容开始--- JAVA 处理时间 - java.sql.Date.java.util.Date与数据库中的Date字段的转换方法,以及util包下的Date类与字符串的相互转换 在java ...

  8. vs密匙

    Visual Studio 2019(VS2019) 企业版 Enterprise 激活码:BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2017(VS201 ...

  9. LIS(最长上升子序列)的 DP 与 (贪心+二分) 两种解法

    正好训练赛来了一道最长递减序列问题,所以好好研究了一下最长递增序列问题. B - Testing the CATCHER Time Limit:1000MS     Memory Limit:3000 ...

  10. 技术沙龙|京东云DevOps自动化运维技术实践

    自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...