JavaScript详解(三)
JavaScript的数组
JavaScript中的数组具有相当的灵活性,除了能存储数据外,还提供了一系列的属性和方法。因为JavaScript本身是一个弱类型语言,故其数组不会限制存放数据的类型。
定义的四种方式:
- var x = new Array(); //空数组
- var x = new Array(size); //指定长度
- var x = new Array(element0,element1...,elementn); //指定初始值
- var x = [element0,element1...,elementn]; //指定初始值
读取数组可用其下标,从0开始,当超出下标边界,不会报错,而是返回一个undefined。
改变数组长度的三种方式:
- 未超出数组长度的下标赋值
- 改变数组的length属性
- 通过数组的相应方法,如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中的字典。
定义方式:
- var x = {}; //定义空hash
- var x = {'key1':'value1','key2':'value2'...};//指定初始化
读取数据方式:
- x.key
- 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的执行分两步,先从上而下解析一次,再从上而下执行一次。
- 解析:解析主要看var 、function(参数 ),对于var,解析时定义一个变量,并给他初始化一个undefined,但不赋值,对于函数,只定义函数,但不执行函数体。如果变量和函数名重名,函数优先。
- 执行:解析完后,从上而下执行。碰到函数执行,会产生一个新的作用域,在函数体内再次先做解析,后执行。
JavaScript详解(三)的更多相关文章
- .NET DLL 保护措施详解(三)最终效果
针对.NET DLL 保护措施详解所述思路完成最终的实现,以下为程序包下载地址 下载 注意: 运行环境为.net4.0,需要安装VS2015 C++可发行组件包vc_redist.x86.exe.然后 ...
- Android 之窗口小部件详解(三) 部分转载
原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...
- WebSocket安卓客户端实现详解(三)–服务端主动通知
WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...
- logback -- 配置详解 -- 三 -- <encoder>
附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...
- python设计模式之装饰器详解(三)
python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...
- Python操作redis字符串(String)详解 (三)
# -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1.SET 命令用于设置 ...
- pika详解(三)SelectConnection及其他Connection
pika详解(三)SelectConnection及其他Connection 本文链接:https://blog.csdn.net/comprel/article/details/94661147 ...
- Android WebView 开发详解(三)
转载请注明出处 http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...
- Day03 javascript详解
day03 js 详解 JavaScript的基础 JavaScript的变量 JavaScript的数据类型 JavaScript的语句 JavaScript的数组 JavaScript的函数 Ja ...
- View绘制详解(三),扒一扒View的测量过程
所有东西都是难者不会,会者不难,Android开发中有很多小伙伴觉得自定义View和事件分发或者Binder机制等是难点,其实不然,如果静下心来花点时间把这几个技术点都研究一遍,你会发现其实这些东西都 ...
随机推荐
- NumPy 基于数值区间创建数组
来源:Python Numpy 教程 章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基 ...
- canvas背景粒子动态变化动画
var canvas = document.getElementById("cas"); var ctx = canvas.getContext("2d"); ...
- vim使用技巧(常用指令)
1. vim基础操作 vim是从 vi 发展出来的一个文本编辑器 .代码补完.编译及错误跳转等做了一些增强 1.1 进入编辑模式 命令 含义 i和I i在光标前插入,I在行首插入. a和A a在光标后 ...
- 使用BP爆破有token值的密码(10.17 第二十三天)
此次爆破使用的网站是DVWA来进行测试 工具:Burp suite 1.进去DVWA网站,选择高级安全等级,再进入到Brute Force(爆破)模块,假设此时已知账号是admin的情况下我们不知道密 ...
- 通过while循环一步步实现九九乘法表
# 打印#做出@列的效果height = int(input("height: ")) #用户输入一个高度 num_height = heightwhile num_height ...
- HDU 1576:A/B
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- java.sql.Date转换
---恢复内容开始--- JAVA 处理时间 - java.sql.Date.java.util.Date与数据库中的Date字段的转换方法,以及util包下的Date类与字符串的相互转换 在java ...
- vs密匙
Visual Studio 2019(VS2019) 企业版 Enterprise 激活码:BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2017(VS201 ...
- LIS(最长上升子序列)的 DP 与 (贪心+二分) 两种解法
正好训练赛来了一道最长递减序列问题,所以好好研究了一下最长递增序列问题. B - Testing the CATCHER Time Limit:1000MS Memory Limit:3000 ...
- 技术沙龙|京东云DevOps自动化运维技术实践
自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...