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. 八、React实战:可交互待办事务表(表单使用、数据的本地缓存local srtorage、生命同期函数(页面加载就会执行函数名固定为componentDidMount()))

    一.项目功能概述 示例网址:http://www.todolist.cn/ 功能: 输入待做事项,回车,把任务添加到 [正在进行] [正在进行] 任务,勾选之后,变成已[经完成事项] [已完成事务], ...

  2. Linux Mysql 安装 开启远程连接 供python agent 连接测试 Mark

    Linux     6.3 (1) cat  /etc/redhat-release uname -a 查看yum 源:   阿里源 无源运行: echo 下载阿里云的yum源配置 wget -O / ...

  3. 服务器上安装解决ole错误

    服务器上安装此插件  提取码:9kiw

  4. UVA_12697 满足条件的最短连续和 线段树维护

    好印象深刻的题,前天选拔赛给跪了.怪我这种关键题没敲出来. 题意很简单,给你一串无规则的数列,再给个m值,求出满足 数列和>=m的长度最小的连续子串...确实一开始卡住了,因为看数据肯定是nlo ...

  5. 了解OOM

    1)什么是OOM? OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError.看下关于的官方说明: Thrown when ...

  6. select * 和select 1 以及 select count(*) 和select count(1)的区别

    select 1 和select * select * from 表:查询出表中所有数据,性能比较差: select 常量 from 表:查询出结果是所有记录数的常量,性能比较高: selelct 常 ...

  7. @SpringBootApplication 标注非引导类

    1.引导类 public class App { public static void main(String[] args) { SpringApplication.run(WebConfigura ...

  8. java Kafka 简单应用实例

    kafka官方中文文档  http://kafka.apachecn.org/ java Kafka 简单应用实例  下面是Linux下的单机模式:https://blog.csdn.net/fct2 ...

  9. 18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询

    -- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前 ...

  10. h5-任意元素居中

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...