Java教程

JavaScript 入门

本文主要是介绍JavaScript 入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

 

1、基本语法

2、数据类型和变量

数据类型

3、strict模式

 4、字符串

多行字符串

模板字符串

操作字符串

5、数组

indexOf

slice

push和pop

unshift和shift

sort

reverse

splice

concat

join

多维数组

6、对象

7、流程控制

if 判断

for循环

while循环

8、Map 和 Set

Map

Set

9、Iterable

遍历集合


1、基本语法

JavaScript的语法和Java语言类似,每个语句以; 结束,语句块用{...} 。但是,JavaScript并不强制要求在每个语句的结尾加; ,浏览器中负责执行JavaScript代码的引擎会自
动在每个语句的结尾补上;

下面的一行代码就是一个完整的赋值语句:

var x = 1;

下面的一行代码是一个字符串,但仍然可以视为一个完整的语句:

'Hello, world';

下面的一行代码包含两个语句,每个语句用; 表示语句结束:

var x = 1; var y = 2; // 不建议一行写多个

语句块是一组语句的集合,下面的代码先做了一个判断,如果判断成立,将执行{...} 中的所有语句:

if (2 > 1) {
x = 1;
y = 2;
z = 3;
}

{...} 还可以嵌套,形成层级结构:

if (2 > 1) {
x = 1;
y = 2;
z = 3;
if (x < y) {
z = 4;
}
if (x > y) {
z = 5;
}
}

// 开头直到行末的字符被视为行注释,注释是给开发人员看到,JavaScript引擎会自动忽略:

// 这是一行注释
alert('hello'); // 这也是注释

另一种块注释是用/*...*/ 把多行字符包裹起来,把一大“块”视为一个注释:

/* 从这里开始是块注释
仍然是注释
仍然是注释
注释结束 */

JavaScript严格区分大小写,如果弄错了大小写,程序将报错或者运行不正常。

2、数据类型和变量

数据类型

Number

javaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型:

123; // 整数123
0.456; // 浮点数0.456
1.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5
-99; // 负数
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就
表示为Infinity

Number可以直接做四则运算,规则和数学一致:

1 + 2; // 3
(1 + 2) * 5 / 2; // 7.5
2 / 0; // Infinity
0 / 0; // NaN
10 % 3; // 1
10.5 % 3; // 1.5

字符串
字符串是以单引号'或双引号"括起来的任意文本,比如'abc' , "xyz" 等等。'' 或"" 本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc' 只有a , b , c 这3个字符。

布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有true 、false 两种值,要么是true ,要么是false ,可以直接用true 、false 表示布尔值,也可以通过布尔运算计算出来:

true; // 这是一个true值
false; // 这是一个false值
2 > 1; // 这是一个true值
2 >= 3; // 这是一个false值

&& 运算是与运算,只有所有都为true , && 运算结果才是true :

true && true; // 这个&&语句计算结果为true
true && false; // 这个&&语句计算结果为false
false && true && false; // 这个&&语句计算结果为false

|| 运算是或运算,只要其中有一个为true , || 运算结果就是true :

false || false; // 这个||语句计算结果为false
true || false; // 这个||语句计算结果为true
false || true || false; // 这个||语句计算结果为true

! 运算是非运算,它是一个单目运算符,把true 变成false , false 变成true :

! true; // 结果为false
! false; // 结果为true
! (2 > 5); // 结果为true

比较运算符
当我们对Number做比较时,可以通过比较运算符得到一个布尔值:

2 > 5; // false
5 >= 2; // true
7 == 7; // true

JavaScript在设计时,有两种比较运算符:
第一种是== 比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是=== 比较,它不会自动转换数据类型,如果数据类型不一致,返回false ,如果一致,再比较。

由于JavaScript这个设计缺陷,不要使用== 比较,始终坚持使用=== 比较。

另一个例外是NaN 这个特殊的Number与所有其他值都不相等,包括它自己:

唯一能判断NaN 的方法是通过isNaN() 函数:

NaN === NaN; // false
isNaN(NaN); // true

null和undefined

null 表示一个“空”的值,它和0 以及空字符串'' 不同, 0 是一个数值, '' 表示长度为0的字符串,而null 表示“空”。

而undefined 表示值未定义大多数情况下,我们都应该用null 。undefined 仅仅在判断函数参数是否传递的情况下有用。

数组

数组是一组按顺序排列的集合,集合的每个值称为元素。JavaScript的数组可以包括任意数据类型。例如:

[1, 2, 3.14, '1 Hello', null, true];

另一种创建数组的方法是通过Array() 函数实现:

new Array(1, 2, 3); // 创建了数组[1, 2, 3]

数组的元素可以通过索引来访问。请注意,索引的起始值为0 :

var arr = [1, 2, 3.14, 'Hello', null, true];
arr[0]; // 返回索引为0的元素,即1
arr[5]; // 返回索引为5的元素,即true
arr[6]; // 索引超出了范围,返回undefined

对象

JavaScript的对象是一组由键-值组成的无序集合,例如:

var person = {
name: 'Bob',
age: 20,
tags: ['js', 'web', 'mobile'],
city: 'Beijing',
hasCar: true,
zipcode: null
};

变量

变量在JavaScript中就是用一个变量名表示,变量名是大小写英文、数字、$ 和_ 的组合,且不能用数字开头。变量名也不能是JavaScript的关键字,如if 、while 等。申明一个变量用var 语
句,比如:

var a; // 申明了变量a,此时a的值为undefined
var $b = 1; // 申明了变量$b,同时给$b赋值,此时$b的值为1
var s_007 = '007'; // s_007是一个字符串
var Answer = true; // Answer是一个布尔值true
var t = null; // t的值是null

使用等号= 对变量进行赋值。可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用var 申明一次

var a = 123; // a的值是整数123
a = 'ABC'; // a变为字符串

3、strict模式

启用strict模式的方法是在JavaScript代码的第一行写上:

'use strict';

这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。

 4、字符串

JavaScript的字符串就是用'' 或"" 括起来的字符表示。

如果字符串内部既包含' 又包含" 可以用转义字符\ 来标识,

I\'m \"OK\"!';

表示的字符串内容是: I'm "OK"!

转义字符\ 可以转义很多字符,比如\n 表示换行, \t 表示制表符,字符\ 本身也要转义,所以\\ 表示的字符就是\ 。

多行字符串

由于多行字符串用\n 写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ``表示:

`这是一个
多行
字符串`;

模板字符串

要把多个字符串连接起来,可以用+ 号连接:

var name = '小明';
var age = 20;
var message = '你好, ' + name + ', 你今年' + age + '岁了!';
alert(message);

如果有很多变量需要连接,用+ 号就比较麻烦。ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量:

var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);

操作字符串

字符串常见的操作如下:

var s = 'Hello, world!';
s.length; // 13

要获取字符串某个指定位置的字符,使用类似Array的下标操作,索引号从0开始:

var s = 'Hello, world!';
s[0]; // 'H'
s[6]; // ' '
s[7]; // 'w'
s[12]; // '!'
s[13]; // undefined 超出范围的索引不会报错,但一律返回undefined
  • toUpperCase() 把一个字符串全部变为大写
  • toLowerCase() 把一个字符串全部变为小写
  • indexOf() 会搜索指定字符串出现的位置
  • substring() 返回指定索引区间的子串
  • 。。。

5、数组

JavaScript的Array 可以包含任意数据类型,并通过索引来访问每个元素。

直接给Array 的length 赋一个新的值会导致Array 大小的变化:

var arr = [1, 2, 3];
arr.length; // 3
arr.length = 6;
arr; // arr变为[1, 2, 3, undefined, undefined, undefined]
arr.length = 2;
arr; // arr变为[1, 2]

Array 可以通过索引把对应的元素修改为新的值,因此,对Array 的索引进行赋值会直接修改这个Array

var arr = ['A', 'B', 'C'];
arr[1] = 99;
arr; // arr现在变为['A', 99, 'C']

如果通过索引赋值时,索引超过了范围,同样会引起Array 大小的变化

var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr变为[1, 2, 3, undefined, undefined, 'x']

常用方法

indexOf

与String类似, Array 也可以通过indexOf() 来搜索一个指定的元素的位置:

var arr = [10, 20, '30', 'xyz'];
arr.indexOf(10); // 元素10的索引为0
arr.indexOf(20); // 元素20的索引为1
arr.indexOf(30); // 元素30没有找到,返回-1
arr.indexOf('30'); // 元素'30'的索引为2

数字30 和字符串'30' 是不同的元素。

slice

slice() 就是对应String的substring() 版本,它截取Array 的部分元素,然后返回一个新的Array

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
arr.slice(3); // 从索引3开始到结束: ['D', 'E', 'F', 'G']

push和pop

push() 向Array 的末尾添加若干元素, pop() 则把Array 的最后一个元素删除掉

var arr = [1, 2];
arr.push('A', 'B'); // 返回Array新的长度: 4
arr; // [1, 2, 'A', 'B']
arr.pop(); // pop()返回'B'
arr; // [1, 2, 'A']
arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次
arr; // []
arr.pop(); // 空数组继续pop不会报错,而是返回undefined
arr; // []

unshift和shift

如果要往Array 的头部添加若干元素,使用unshift() 方法, shift() 方法则把Array 的第一个元素删掉:

var arr = [1, 2];
arr.unshift('A', 'B'); // 返回Array新的长度: 4
arr; // ['A', 'B', 1, 2]
arr.shift(); // 'A'
arr; // ['B', 1, 2]
arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次
arr; // []
arr.shift(); // 空数组继续shift不会报错,而是返回undefined
arr; // []

sort

sort() 可以对当前Array 进行排序,它会直接修改当前Array 的元素位置,直接调用时,按照默认顺序排序

 var arr = ['B', 'C', 'A'];
arr.sort();
arr; // ['A', 'B', 'C']

reverse

reverse() 把整个Array 的元素给掉个个,也就是反转

 var arr = ['one', 'two', 'three'];
arr.reverse();
arr; // ['three', 'two', 'one']

splice

splice() 方法是修改Array 的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL',
'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只删除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不删除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

concat

concat() 方法把当前的Array 和另一个Array 连接起来,并返回一个新的Array

var arr = ['A', 'B', 'C'];
var added = arr.concat([1, 2, 3]);
added; // ['A', 'B', 'C', 1, 2, 3]
arr; // ['A', 'B', 'C']

实际上, concat() 方法可以接收任意个元素和Array ,并且自动把Array 拆开,然后全部添加到新的Array 里:

var arr = ['A', 'B', 'C'];
arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]

join

join() 方法它把当前Array 的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:

var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'

如果Array 的元素不是字符串,将自动转换为字符串后再连接

多维数组

如果数组的某个元素又是一个Array ,则可以形成多维数组,例如:

var arr = [[1, 2, 3], [400, 1 500, 600], '-'];

上述Array 包含3个元素,其中头两个元素本身也是Array 。

6、对象

JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。
JavaScript的对象用于描述现实世界中的某个对象。
 

var person = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
}

1、定义一个对象

var 对象名 = {
key: 'value',
key: 'value',
key: 'value'
}

2、获取对象的属性

对象.属性

3、由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:

var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
delete xiaoming['name']; // 删除name属性
xiaoming.name; // undefined
delete xiaoming.school; // 删除一个不存在的school属性也不会报错

7、流程控制

if 判断

var age = 3;
if (age >= 18) {
alert('adult');
} else if (age >= 6) {
alert('teenager');
} else {
alert('kid');
}

for循环

基础语法

var x = 0;
var i;
for (i=1; i<=10000; i++) {
x = x + i;
}
x; // 50005000

遍历数组

var arr = ['Apple', 'Google', 'Microsoft'];
var i, x;
for (i=0; i<arr.length; i++) {
x = arr[i];
console.log(x);
}

无限循环

var x = 0;
for (;;) { // 将无限循环下去
if (x > 100) {
break; // 通过if判断来退出循环
}
x ++;
}

for ... in , 它可以把一个对象的所有属性依次循环出来:

var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
console.log(key); // 'name', 'age', 'city'
}
}

由于 Array 也是对象,而它的每个元素的索引被视为对象的属性,所以遍历出来是下标

var a = ['A', 'B', 'C'];
for (var i in a) {
console.log(i); // '0', '1', '2'
console.log(a[i]); // 'A', 'B', 'C'
}

for ... in 对Array 的循环得到的是String 而不是Number 。

while循环

基本操作

var x = 0;
var n = 99;
while (n > 0) {
x = x + n;
n = n - 2;
}
x; // 2500

do.....while

var n = 0;
do {
n = n + 1;
} while (n < 100);
n; // 100

8、Map 和 Set

Map

Map 是一组键值对的结构,具有极快的查找速度。

初始化Map 需要一个二维数组,或者直接初始化一个空Map 。Map 具有以下方法:

var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:

var m = new Map();
m.set('Adam', 67);
m.set('Adam', 88);
m.get('Adam'); // 88

Set

Set 和Map 类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set 中,没有重复的key。

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3

重复元素在Set 中自动被过滤:

var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}

通过add(key) 方法可以添加元素到Set 中,可以重复添加,但不会有效果:

s.add(4);
s; // Set {1, 2, 3, 4}
s.add(4);
s; // 仍然是 Set {1, 2, 3, 4}

通过delete(key) 方法可以删除元素:

var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}

9、Iterable

遍历 Array 可以采用下标循环,遍历Map 和 Set 就无法使用下标。

为了统一集合类型,ES6标准引入了新的iterable 类型,Array,Map,Set 属于;具有iterable 类型的集合可以通过新的for ... of 循环来遍历。

遍历集合

var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍历Array
console.log(x);
}
for (var x of s) { // 遍历Set
console.log(x);
}
for (var x of m) { // 遍历Map
console.log(x[0] + '=' + x[1]);
}

更好的方式是直接使用iterable 内置的forEach 方法,它接收一个函数,每次迭代就自动回调该函数。以Array 为例

a.forEach(function (element, index, array) {
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向Array对象本身
console.log(element + ', index = ' + index);
}):

Set 没有索引,因此回调函数的前两个参数都是元素本身:

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
console.log(element);
});

Map 的回调函数参数依次为value 、key 和map 本身

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
console.log(value);
});

 

这篇关于JavaScript 入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!