前端学习 之 JavaScript基础

一. JavaScript简介

1. JavaScript的历史背景介绍

1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器,轰动一时。但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。比如,如果网页上有一栏"用户名"要求填写,浏览器就无法判断访问者是否真的填写了,只有让服务器端判断。如果没有填写,服务器端就返回错误,要求用户重新填写,这太浪费时间和服务器资源了。

因此,网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。工程师Brendan Eich负责开发这种新语言。他觉得,没必要设计得很复杂,这种语言只要能够完成一些简单操作就够了,比如判断用户有没有填写表单。

1994年正是面向对象编程(object-oriented programming)最兴盛的时期,C++是当时最流行的语言,而Java语言的1.0版即将于第二年推出,Sun公司正在大肆造势。

Brendan Eich无疑受到了影响,Javascript里面所有的数据类型都是对象(object),这一点与Java非常相似。但是,他随即就遇到了一个难题,到底要不要设计"继承"机制呢?

如果真的是一种简易的脚本语言,其实不需要有"继承"机制。但是,Javascript里面都是对象,必须有一种机制,将所有对象联系起来。所以,Brendan Eich最后还是设计了"继承"。

但是,他不打算引入"类"(class)的概念,因为一旦有了"类",Javascript就是一种完整的面向对象编程语言了,这好像有点太正式了,而且增加了初学者的入门难度。

2.ECMAScript和JavaScript的关系

1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。

该标准一开始就是针对JavaScript语言制定的,但是没有称其为JavaScript,有两个方面的原因。一是商标,JavaScript本身已被Netscape注册为商标。二是想体现这门语言的制定者是ECMA,而不是Netscape,这样有利于保证这门语言的开发性和中立性。

因此ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现。

3.ECMAScript的历史

1ECMAScript简介

ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,但实际上后两者是ECMA-262标准的实现和扩展。

(2)ECMAScript历史发展

1998年6月,ECMAScript 2.0版发布。

1999年12月,ECMAScript 3.0版发布,成为JavaScript的通行标准,得到了广泛支持。

2007年10月,ECMAScript 4.0版草案发布,对3.0版做了大幅升级,预计次年8月发布正式版本。草案发布后,由于4.0版的目标过于激进,各方对于是否通过这个标准,发生了严重分歧。以Yahoo、Microsoft、Google为首的大公司,反对JavaScript的大幅升级,主张小幅改动;以JavaScript创造者Brendan Eich为首的Mozilla公司,则坚持当前的草案。

2008年7月,由于对于下一个版本应该包括哪些功能,各方分歧太大,争论过于激进,ECMA开会决定,中止ECMAScript 4.0的开发,将其中涉及现有功能改善的一小部分,发布为ECMAScript 3.1,而将其他激进的设想扩大范围,放入以后的版本,由于会议的气氛,该版本的项目代号起名为Harmony(和谐)。会后不久,ECMAScript 3.1就改名为ECMAScript 5。

2009年12月,ECMAScript 5.0版正式发布。Harmony项目则一分为二,一些较为可行的设想定名为JavaScript.next继续开发,后来演变成ECMAScript 6;一些不是很成熟的设想,则被视为JavaScript.next.next,在更远的将来再考虑推出。

2011年6月,ECMAscript 5.1版发布,并且成为ISO国际标准(ISO/IEC 16262:2011)。

2013年3月,ECMAScript 6草案冻结,不再添加新功能。新的功能设想将被放到ECMAScript 7。

2013年12月,ECMAScript 6草案发布。然后是12个月的讨论期,听取各方反馈。

2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015。

ECMA的第39号技术专家委员会(Technical Committee 39,简称TC39)负责制订ECMAScript标准,成员包括Microsoft、Mozilla、Google等大公司。TC39的总体考虑是,ES5与ES3基本保持兼容,较大的语法修正和新功能加入,将由JavaScript.next完成。

注:ES6就是指ECMAScript 6。

尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:

核心(ECMAScript)

文档对象模型(DOM) Document object model (整合js,css,html)

浏览器对象模型(BOM) Broswer object model(整合js和浏览器)

简单地说,ECMAScript 描述了JavaScript语言本身的相关内容。

4.JavaScript特性与优点

JavaScript 是脚本语言

JavaScript 是一种轻量级的编程语言。

JavaScript 是可插入 HTML 页面的编程代码。

JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

JavaScript 很容易学习。

5. JavaScript的组成

JavaScript基础分为三个部分:

ECMAScript:JavaScript的语法标准。包括变量、表达式、运算符、函数、if语句、for语句等。

DOM:操作网页上的元素的API。比如让盒子移动、变色、轮播图等。

BOM:操作浏览器部分功能的API。比如让浏览器自动滚动。

二. 初识JavaScript代码

1.JavaScript引入方式

(1)Script标签内写代码

在head标签里面可以写,在body标签里面也可以写,到head标签里面和放到body标签里面是有区别的

<script>

// 在这里写你的JS代码

 //console.log('骑士计划!') #f12建打开浏览器的调试窗口,然后在console这个调试台就能看到这个内容了

</script>

(2)引入额外的JS文件

以下是将这一行放在html文件的head部分。对于下面的语句现在type="text/javascript"这个类型也可以去除不写。

<script type="text/javascript" src="myscript.js"></script>

2. JavaScript的语法规则

(1)语法规则

1.JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。

2.声明变量使用 var 变量名; 的格式来进行声明

所有的符号,都是英语的。比如括号、引号、分号。

(2)注释(注释是代码之母)

// 这是单行注释

/*

这是

多行注释

*/

(3)结束符

JavaScript中的语句要以分号(;)为结束符。也就是说和缩进没关系了

3.JavaScript在网页中输出信息的写法

(4)弹出警告框:alert语句

语法:alert("");

<script type="text/javascript">

alert("这是一个警告弹出框")

</script>

运行结果:

前端学习 之 JavaScript基础

(2)控制台输出:console.log("")

console.log("") 表示在控制台中输出。console表示“控制台”,log表示“输出”。

控制台在Chrome浏览器的F12中。控制台是工程师、程序员调试程序的地方。程序员经常使用这条语句输出一些东西,来测试程序是否正确。

例:

<script>

console.log("这个控制台输出");

</script>

运行结果为:

前端学习 之 JavaScript基础

在浏览器的Console里面输出代码中输出的语句内容。

4.用户输入语句

prompt() 就是专门用来弹出能够让用户输入的对话框。

代码如下:

<script type="text/javascript">

var a = prompt("今日天气如何?");

console.log(a);

</script>

上方代码中,用户输入的内容,将被传递到变量 a 里面。

效果如下:

首先弹框让其输入内容:

前端学习 之 JavaScript基础

然后再console中输出相应的输入内容:

前端学习 之 JavaScript基础

prompt()语句中,用户不管输入什么内容,都是字符串。

alert和prompt的区别:

alert("这个内容会弹框");                //直接使用,不需要变量

var a = prompt("请输入内容");   // 必须用一个变量,来接收用户输入的值

5.直接量:数字和字符串

“直接量”即常量,也称为“字面量”。看见什么,它就是什么。

简单的直接量有2种:数字、字符串。

(1)数值的直接量的表达非常简单,写上去就行了,不需要任何的符号。例如:

alert(886);  //886是数字,所以不需要加引号。

(2)字符串也很简单,但一定要加上引号。可以是单词、句子等。例如:

alert("Hello");

alert("Hello world");

ES6新增const用来声明常量。一旦声明,其值就不能改变。这个东西就是为了定义一个固定的常量,供大家使用,这个常量不会改变。

const PI = 3.1415;

PI // 3.1415

PI = 3

// TypeError: "PI" is read-only,如果将其改变会出错

6.变量的定义和赋值

定义变量:var就是一个关键字,用来定义变量。所谓关键字,就是有特殊功能的小词语。关键字后面一定要有空格隔开。

变量的赋值:等号表示赋值,将等号右边的值,赋给左边的变量。

变量名:我们可以给变量任意的取名字。

PS:在JavaScript中,永远都是用var来定义变量,这和C、Java等语言不同

变量要先定义,才能使用。比如,我们不设置变量,直接输出:

<script type="text/javascript">

console.log(a);

</script>

会报错:

前端学习 之 JavaScript基础

正确写法:

var a;   // 定义

a = 100;  //赋值

console.log(a);  //输出100

前端学习 之 JavaScript基础

也可以这样写:

var a = 100;    //定义,并且赋值100

console.log(a);  //输出100

ES6新增了let命令,用于声明变量。其用法类似于var,但是所声明的变量只在let命令所在的代码块内有效。例如:for循环的计数器就很适合使用let命令。

如:

for (let i=0;i<arr.length;i++){...}

7. 变量的命名规范

变量名有命名规范:只能由英语字母、数字、下划线、$(美元符)构成,且不能以数字开头,并且不能是JavaScript保留字。

下列的单词,叫做保留字,就是说不允许当做变量名,类似于python中的关键字:

abstract

booleanbytechar

class

const

debuggerdouble

enum

export

extends

finalfloat

goto

implements

importint

interfacelong

native

package

private

protected

publicshort

static

super

synchronized

throws

transient

volatile

大写字母是可以使用的,并且大小写敏感。也就是说A和a是两个变量。

var A = 250;    //变量1

var a = 888;    //变量2

三.JavaScript数据类型

数据类型包括:基本数据类型和引用数据类型

基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。

当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值。

1.基本数据类型

在讲数据类型之前,我们要学习一个函数 typeof 表示“获取变量的类型”,语法为:

typeof 变量名称

(1)number数值类型

例:

var a = 123;

//typeof 检查当前变量是什么数据类型

console.log(typeof a)

还有一种NaN,表示不是一个数字(Not a Number),也就是说是一个值,但不是数字。

在JavaScript中,只要是数,就是数值型(number)的。无论整浮、浮点数(即小数)、无论大小、无论正负,都是number类型的。

(2) string字符串类型

var a = "abcde";

var b = "路飞";

var c = "123123";

var d = "哈哈哈哈哈";

var e = "";     //空字符串

console.log("检测是string类型")

console.log("a:"+typeof a);

console.log("b:"+typeof b);

console.log("c:"+typeof c);

console.log("d:"+typeof d);

console.log("e:"+typeof e);

(3) boolean布尔类型

console.log("检测是bloolean类型:")

var b1 = false;

console.log("b1:"+typeof b1)

var b2= true;

console.log("b2:"+typeof b2)

在JavaScript中,false类型6种

1.undefined

2.‘ ’ //空字符串

3.null

4.false

5.NaN //值NaN是一个数值,表示一个不能产生正常结果的运算结果,它不能等任何值,包括它自己

6.数字0 或0.0

(4) null空对象类型

console.log("检测是null空对象类型")

var c1 = null;//空对象  object

console.log("c1:"+c1)

(5)undefined未定义类型

console.log("检测是undefined未定义类型")

var d1;

//表示变量未定义

console.log("d1:"+typeof d1)

2. 引用数据类型

Function

Object

Array

String

Date

后面文档将详细介绍。

四.运算符

1. 赋值运算符

以var x = 12,y=5为例:

运算符

例子

等同于

结果

=

x=y

5

+=

x+=y

x=x+y

x=17

-=

x-=y

x=x-y

x=7

*=

x*=y

x=x*y

x=60

/=

x/=y

x=x/y

x=2

%=

x%=y

x=x%y

x=2

最后两个是一个是除等于,一个是取余(模)等于的意思。

2.算术运算符

以var a = 5,b=2为例:

运算符

描述

例子

运算结果

=

加法

var c=a+b

c=7

-

减法

var c=a-b

c=3

*

乘法

var c=a*b

c=10

/

除法

var c=a/b

c=2.5

%

取余

x=x%y

c=1

++

自增

var x=a++

x=5,a=6

var x=++a

x=6,a=6

--

自减法

var x=a--

x=5,a=4

var x=--a

x=4,a=4

注意:

当运算符++在后面时,先赋值,后自增。

当运算符++在前面时,先自增,后赋值。

3.比较运算符

以var x = 5为例:

运算符

描述

例子

运算结果

==

等于

x==8,x==5

false,true

===

等同于(值和类型均相等)

x===5,x===‘5’

true,false

!=

不等于

x!=8

true

!==

不等同与(值和类型有一个不同于就false)

x!==5,x!==‘5’

false,true

>

大于

x>8

false

<

小于

x<8

true

>=

大于等于

x>=8

false

<=

小于等于

x<=8

true

4.特殊的字符串拼接和加减

(1)字符串拼接

例1:

var firstName = '小';

var lastName = '姐姐';

var name = '伊拉克';

var am = '美军';

// 字符串拼接

var tempStr = "2003年3月20日," + name + "战争爆发,以美军为主的联合部队仅用20多天就击溃了萨达姆的军队。这是继十多年前的海湾战争后," + am + "又一次取得的大规模压倒性军事胜利。"

console.log(tempStr);

var fullName = firstName + " " + lastName;

console.log(fullName);

运行结果为:

前端学习 之 JavaScript基础

例2:

// 不能对字符串进行+运算 只能拼接

var a1 = '1';

var a2 = '2';

console.log(a1+a2) //输出字符串相加的内容

console.log(typeof(a1+a2))  //输出字符串相加的类型

运行结果为:

前端学习 之 JavaScript基础

(2)字符串加Number

例1:

var a1 = 1;

var a2 = '2';

console.log(a1+a2) //输出字符串相加的内容

console.log(typeof(a1+a2))  //输出字符串相加的类型

前端学习 之 JavaScript基础

(3)字符串相乘除

var b1 = 'one';

var b2  = 'two';

// NaN ==== not a number 是number类型

console.log(b1*b2)  // NaN

console.log(b1/b2)  // NaN

console.log(typeof(b1*b2))  // number

console.log(typeof(b1/b2))  // number

运行结果:

前端学习 之 JavaScript基础

注意:虽然两个字符串相加减得到的结果是NaN,但是也是属于Number类型的数据。

五.数据类型的强制转换

1. 将数值类型转换为字符串类型

number -----> string

(1)隐式转换

例1:

var n1 = 123;

var n2 = '456';

var n3 = n1+n2;

// 隐式转换为字符串

console.log(typeof n3);

(2)强制类型转换

例2:

var n1 = 123;

// 强制类型转换String(),toString()

var str1 = String(n1);

console.log(typeof str1);

var num = 234;

console.log(num.toString())

2.将字符串类型转换成数值类型

string -----> number

例3:

var strNum = "123.45dfsdfsd";

var num = Number(strNum);

console.log(num);  // NaN

console.log(typeof num);  // number

// parseInt()可以解析一个字符串 并且返回一个整数

console.log(parseInt(strNum);  // 123

console.log(typeof(parseInt(strNum)));  // number

// parseFloat()可以解析一个字符串 并且返回一个浮点数

console.log(parseFloat(strNum);  // 123.45

console.log(typeof(parseFloat(strNum)));  // number

3.任何数据类型都可以转为布尔类型

* -----> boolean

例4:

var num1 = 123;

var num2 = 0;

var num3 = -123;

var a1 = NaN;

var a2;

var a3 = null;

// 数字非零即为真。

console.log(Boolean(num1);  // true

console.log(Boolean(num2);  // false

console.log(Boolean(num3);  //true

console.log(Boolean(a1);  // false

console.log(Boolean(a2);  // false

console.log(Boolean(a3);  // false

六.流程控制

1.if控制语句

if语句表示,如果括号里面的条件成立那么运行紧接着的后面的大括号{}里面的代码,

出现的if多分支语句,满足哪个分支条件就运行哪个分支后{}的代码,多分支语句之间的条件不能冲突,即条件只能满足其中一个。

(1)if(判断条件){代码1,2...}

例1:

var age = 18;

if (age >= 18){

console.log("恭喜你,可以去网吧玩游戏了!");

}

(2)if(判断条件){代码1,2...}else{代码1,2...}

例2:

var age = 17;

if (age >= 18){

console.log("恭喜你,可以网吧玩游戏了!");

}else{

console.log("好好上学吧!");

}

(3)if(条件1){代码1,2...}else if(条件1,2){代码1,2...}else(条件3){代码1,2...}

例3:

var age = 5;

if (age >= 18){

console.log("恭喜你,可以去网吧玩游戏了!");

}else if(age<6){

console.log("好好玩耍吧!");

}else{

console.log("好好上学吧!");

}

if (true) {

//满足条件执行

}else if(true){

//满足条件执行

}else if(true){

//满足条件执行

}else{

//满足条件执行

}

else if的分支可以为很多个。

2.逻辑运算符(与或非)

与:&&

或:||

非:!

例:

var sex = "女";

var age = 22;

var hobby = "吹管乐";

var flag = false; // 是否有男朋友

if (age >= 18 && sex == "女") {

console.log("妙龄少女");

}

if (age >= 18 || hobby == "吹管乐") {

console.log("凑合吧");

}

if (!flag){

console.log("这是机会。");

}

3.switch语句

例:

var age = 25;

switch (age) {

//case表示一个条件 满足这个条件就会走进来 遇到break跳出。如果某个条件中不写 break,那么直到该程序遇到下一个break停止

case 18:

console.log("已经成年了,需要独立了。");

break;

case 60:

console.log("需要回家养老了!");

break;

case 25:

console.log("奋斗的年龄!");

break;

default:

console.log("这个不好说");

break;

}

4. while循环

循环三步走:

1.初始化循环变量

2.判断循环条件

3.更新循环变量

while(条件){

//运行相关代码

//改变循环原来的量,如果不改变会死循环

//

}

例1:

var i = 1; //初始化循环变量

while(i<=9){ //判断循环条件

console.log(i);

i++; //更新循环条件   等同于i=i+1

}

前端学习 之 JavaScript基础

例2:(死循环例子)

var i = 1; //初始化循环变量

while(i != 0){ //判断循环条件

console.log(i);

i++; //更新循环条件   等同于i=i+1

}

例2出现死循环,短时间会出现内存占用100%现象。

5.do{...}while(条件)

例:

//不管有没有满足while中的条件do里面的代码都会走一次

var i = 3;//初始化循环变量

do{

console.log(i)

i++;//更新循环条件

}while (i<10) //判断循环条件

6.for循环

(1)单个for循环

例1:打印1到10

for(var i = 1;i<=10;i++){

console.log(i)

}

例2:打印1--100的偶数。

// 打印1--100的偶数。

for(var i = 1;i<=100;i++){

if(i%2==0){

//是偶数

console.log(i)

}

}

(2)双层for循环

例:

for (var i = 1; i <= 5; i++) { // 行数

for (var j = 0; j < 6; j++) {// 每行的列数

document.write('*')

}

document.write('<br>')

}

运行效果:

前端学习 之 JavaScript基础

七.常用内置对象

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。

JavaScript 提供多个内置对象,比如 Number、String、Date、Array 等等,通过new实例化的对象都是object类型(var s = new String('hello'),var n = new Number(12)等),数组不需要new生命,类型就是object类型。

对象只是带有属性和方法的特殊数据类型。

1. 数组Array

数组对象的作用是:使用单独的变量名来存储一系列的值。类似于Python中的列表。

(1)数组的创建方式

a.字面量方式创建(推荐大家使用这种方式,简单粗暴)

var arr = ["alex", "egon", "yuan"];

b.使用new关键词

使用构造函数(需要自己了解)的方式创建 使用new关键词对构造函数进行创建对象

var arr = new Array();

(2)数组的赋值

通过下标进行一一赋值

例:

var arr = [];

//通过下标进行一一赋值

arr[0] = 123;

arr[1] = '哈哈哈';

arr[2] = '嘿嘿嘿'

(3)数组的常用方法

前端学习 之 JavaScript基础

a.数组的合并 concat()

例:

var north = ['北京','山东','天津'];

var south = ['东莞','深圳','上海'];

var newCity = north.concat(south);

console.log(newCity)  //输出结果: ["北京", "山东", "天津", "东莞", "深圳", "上海"]

b. join()

将数组中的元素使用指定的字符串连接起来,它会形成一个新的字符串

例:

var score = [98,78,76,100,0];

var str = score.join('|');

console.log(str);// 输出结果:98|78|76|100|0

c.将数组转换成字符串 toString()

例:

var score = [98,78,76,100,0];

//toString() 直接转换为字符串  每个元素之间使用逗号隔开

var str = score.toString();

console.log(str);//98,78,76,100,0

d.slice切割

slice(start,end); 返回数组的一段,左闭右开

例:

var arr = ['张三','李四','王五','赵六'];

var newArr  = arr.slice(1,3);

console.log(newArr);//结果为:["李四", "王五"]

e. pop 元素

pop数组的最后一个元素并返回删除的元素

例:

var arr = ['张三', '李四', '王五', '赵六'];

var item = arr.pop();

console.log(arr);//["张三", "李四","王五"]

console.log(item);//赵六

f.push添加元素

push() 向数组末尾添加一个元素或多个元素,并返回新的长度

例1:添加一个元素

var arr = ['张三', '李四', '王五', '赵六'];

var newLength = arr.push('铁蛋');//可以添加多个,以逗号隔开

console.log(newLength);//5

console.log(arr);  //结果为:["张三", "李四", "王五", "赵六", "铁蛋"]

例2:添加两个元素

var arr = ['张三', '李四', '王五', '赵六'];

var newLength = arr.push('铁蛋','铁锤');//可以添加多个,以逗号隔开

console.log(newLength);//6

console.log(arr);  //结果为:["张三", "李四", "王五", "赵六", "铁蛋", "铁锤"]

g.reverse() 翻转数组

reverse() 使得数组的元素顺序倒过来排序。

例:

var arr = ['张三', '李四', '王五', '赵六'];

//反转数组

arr.reverse();

console.log(arr); //结果为: ["赵六", "王五", "李四", "张三"]

h.sort对数组排序

sort对数组中的元素进行排序,排序的规则是首字符按照ASSCII码来排序优先,如果第一个字符相同将比较第二个字符,依次类推。

例:

var names = ["one", "two", "three", "five"];

names.sort();

console.log(names);  //结果为:["five", "one", "three", "two"]

i.判断是否为数组isArray()

布尔类型值 = Array.isArray(被检测的值);

j.shift()

shift()删除数组第一个元素并返回该元素

例:

var names = ["zero", "one", "two", "three"];

var a = names.shift();

console.log(a);  // zero

console.log(names);  // 数组剩余: ["one", "two", "three"]

k.unshift()

unshift() 向数组的开头添加一个或更多元素,并返回新的长度

例:

var names = ["zero", "one", "two", "three"];

var newLength = names.unshift('four');//可以添加多个,以逗号隔开

console.log(newLength);//5

console.log(names); // ["four", "zero", "one", "two", "three"]

2.字段串String

字符串方法有:

前端学习 之 JavaScript基础

(1)chartAt() 返回指定索引的位置的字符

例:

var str = 'zero';

var charset = str.charAt(2); //索引的位置是从0开始

console.log(charset);//输出结果为:r

(2)concat 返回字符串值,表示两个或多个字符串的拼接

例:

var str1 = 'ze';

var str2  = 'ro';

console.log(str1.concat(str2));//输出结果为:zero

st1的值和str2的值进行拼接

(3)replace(a,b) 

将字符串a替换成字符串b

例:

var a = '1234567755';

var newStr = a.replace("23456","****");

console.log(newStr);//1****7755

例题将23456的值替换成****,也可以替换成其他的字符串

(4)indexof()

indexof()查找字符的下标,如果找到返回字符串的下标,找不到则返回-1 。跟seach()方法用法一样。

例:

var str = 'zero';

console.log(str.indexOf('e'));// 找到了e返回:1

console.log(str.indexOf('p'));//没有找到p返回:-1

(5)slice(start,end)

slice(start,end) 提取一个字符串的一部分,并返回一新的字符串。左闭右开 分割字符串

例:

var str = 'study javascript';

console.log(str.slice(3,10)); //结果输出: dy java

(6)split()

split('a',1)以字符串a分割字符串,并返回新的数组。如果第二个参数没写,表示返回整个数组,如果定义了个数,返回新数组(数组里的元素个数就是定义的个数)。

例:

var  str =  '今天适合学习JavaScript';

console.log(str.split('a'));  // ["今天适合学习J", "v", "Script"]

console.log(str.split('a', 1));  // ["今天适合学习J"]

(7)substr(start,length)

substr(start,length) 返回一个字符串中从指定位置开始到指定字符数的字符。

例:

var  str =  '今天适合学习JavaScript';

console.log(str.substr(0,4));// 结果为:今天适合

(8) toLowerCase()转小写

例:

var str = 'JavaScript';

console.log(str.toLowerCase()); //输出结果:javascript

(9)toUpperCase()转大写

例:

var str = 'JavaScript';

console.log(str.toUpperCase());  //输出结果为:JAVASCRIPT

(10)trim() 去除字符串两边的空白

例:

var str = '    JavaScript    ';

console.log(str);  //去除之前打印

console.log(str.trim()); //去除之后打印

运行的的结果如图:

前端学习 之 JavaScript基础

特别:

// 四舍五入

var num = 132.62522;

var newNum1 = num.toFixed();

console.log(newNum1); //133

var newNum2 = num.toFixed(2);

console.log(newNum2); //132.63

3.Date日期对象

创建日期对象只有构造函数一种方式,使用new关键字

//创建了一个date对象

var myDate = new Date();

关于时间对象的语法请见下图:

前端学习 之 JavaScript基础

//创建日期对象

var myDate=new Date();

console.log(myDate.getDate());  //输出月份的第几天

console.log(myDate.toLocaleString()); //输出包括年月日的时间

    

4.Math内置对象

常用内置对象有如下表:

方法

含义

Math.floor()

向下取整,称为“地板函数”

Math.ceil()

向上取整,称为“天花板函数”

Math.max(a,b)

求a和b的最大值

Math.min(a,b)

求a和b的最小值

Math.random()

随机数,默认产生0-1之间的随机数

(1)Math.ceil() 向上取整,'天花板函数'

例:

var x = 1.234;

//天花板函数  表示大于等于 x,并且与它最接近的整数是2

var a = Math.ceil(x);

console.log(a);//2

(2)Math.floor 向下取整,'地板函数'

例:

var x = 1.234;

// 小于等于 x,并且与它最接近的整数 1,也称为去尾

var b = Math.floor(x);

console.log(b);//1

(3)求两个数的最大值和最小值

例:

//求 两个数的最大值 最小值

console.log(Math.max(2,5));//5

console.log(Math.min(2,5));//2

(4)随机数 Math.random()

请记住公式:min - max之间的随机数: min+Math.random()*(max-min)

例1:

var ran = Math.random();

console.log(ran);[0,1]之间的随机小数

例2:  

如果让你取100-200之间的随机数,怎么做?

var res = 100+Math.random()*(200-100)

console.log(res);

5.JSON对象

(1)JSON的作用

JSON 是用于存储和传输数据的格式。

JSON 通常用于服务端向网页传递数据 。

JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本。

文本可以被任何编程语言读取及作为数据格式传递。

(2)什么是JSON

JSON 英文全称 JavaScript Object Notation

JSON 是一种轻量级的数据交换格式。

JSON是独立的语言 *

JSON 易于理解。

(3)JSON 实例及JSON 字符串与 JavaScript 对象相互转换

例:

var str1 = '{"name": "hsz", "age": 24}';

var obj1 = {"name": "hsz", "age": 24};

// JSON字符串转换成对象

var obj = JSON.parse(str1);

console.log(obj);  //{name: "hsz", age: 24}

// 对象转换成JSON字符串

var str = JSON.stringify(obj1);

console.log(str); //{"name":"hsz","age":24}

(4)JSON 格式化后为 JavaScript 对象

JSON 格式在语法上与创建 JavaScript 对象代码是相同的。

由于它们很相似,所以 JavaScript 程序可以很容易的将 JSON 数据转换为 JavaScript 对象。

(5)JSON 语法规则

数据为 键/值 对。

数据由逗号分隔。

大括号保存对象。

方括号保存数组。

JSON 数据 - 一个名称对应一个值

JSON 数据格式为 键/值 对,就像 JavaScript 对象属性。

键/值对包括字段名称(在双引号中),后面一个冒号,然后是值:

"name":"hsz"

(6)JSON 对象与数组

JSON 对象保存在大括号内。

就像在 JavaScript 中, 对象可以保存多个 键/值 对:

{"name":"hsz", "age":24}

JSON 数组保存在中括号内。

就像在 JavaScript 中, 数组可以包含对象:

"sites":[

{"name":"hsz", "age":24},

{"name":"zero", "age":20},

{"name":"one", "age":30}

]

在以上实例中,对象 "sites" 是一个数组,包含了三个对象。

如果还需要学习更多关于js的常用对象,请参考链接:http://www.runoob.com/jsref/jsref-tutorial.html

八.函数

函数:就是将一些语句进行封装,然后通过调用的形式,执行这些语句。

函数的作用:

将大量重复的语句写在函数里,以后需要这些语句的时候,可以直接调用函数,避免重复劳动。

简化编程,让编程模块化。

例:

console.log("hello world");

sayHello();     //调用函数

//定义函数:

function sayHello(){

console.log("hello");

console.log("hello world");

}

运行结果为:

前端学习 之 JavaScript基础

1. 第一步定义函数

函数定义的语法:

function 函数名字(){

//函数体内容

}

解释如下:

function:是一个关键字。中文是“函数”、“功能”。

函数名字:命名规定和变量的命名规定一样。只能是字母、数字、下划线、美元符号,不能以数字开头。

参数:后面有一对小括号,里面是放参数用的。

大括号里面,是这个函数的语句。

2. 函数的调用

函数调用的语法:

函数名字();

3. 函数的参数

函数的参数包括形参和实参

注意:实际参数和形式参数的个数,要相同。

例子:

//函数:求和

function sum(a, b) {

console.log(a, b); //打印a和b的值

// console.log(arguments); //

console.log(a + b); //

}

sum(3, 4);  //3 4 7

sum("3", 4);//3 4 34

sum("Hello", "World"); //打印结果:Hello World HelloWorld

4. 函数的返回值

例子:

console.log(sum(3, 4));  //打印结果为:7

//函数:求和

function sum(a, b) {

return a + b;

}

九. 伪数组 arguments

arguments代表的是实参。有个讲究的地方是:arguments只在函数中使用。

1.返回函数实参的个数:arguments.length

例子:

function fn(a,b,c) {

console.log(arguments);

console.log(fn.length);         //获取形参的个数

console.log(arguments.length);  //获取实参的个数

console.log("----------------");

}

fn(2,4);

fn(2,4,6);

fn(2,4,6,8);

前端学习 之 JavaScript基础

2.伪数组的注意点

之所以说arguments是伪数组,是因为:arguments可以修改元素,但不能改变数组的长短。

举例:

function fn(a,b) {

arguments[0] = 99;  //将实参的第一个数改为99

arguments.push(8);  //此方法不通过,因为无法增加元素,会报错

}

fn(2,4);

fn(2,4,6);

fn(2,4,6,8);

清空数组的几种方式:

var array = [1,2,3,4,5,6];

array.splice(0);      //方式1:删除数组中所有项目

array.length = 0;     //方式2:length属性可以赋值,在其它语言中length是只读

array = [];           //方式3:推荐

上一篇:UDP template 代码


下一篇:浅析JQuery中的html(),text(),val()区别