待到秋来九月八,我花开后百花杀
注释
同Java语言一样,使用
//
/*
*/
进行注释
数据类型
在计算机体系中,数据类型是只对任何语言都需要基本存在的东西。
JavaScript提供八个不同的数据类型:
undefined;
null;
boolean;
string;
symbol;
bigint;
number;
object;
动态存储数据类型
变量允许计算机以动态的方式储存和处理数据。
JavaScript通过使用标签来指向数据而不是使用数据本身来做到这一点,八种数据类型中的任何一个都可以存储在变量中。
例如:
var myString = "I am a string";
var myBoolean = true;
var isNull = null;
var isNum = 52;
未初始化变量的情况
声明JavaScript变量后,他们的初始值为undefined。如果此时对未初始化的变量进行数学运算,undefined的变量的结果将是NaN,如果将字符与undefined变量相加,你会得到一个文本字符串的undefined。
var a;
a = a + 1;
var b;
b = b + "String";
变量运算
与Java以及大多数语言一样,JavaScript同样具有基本的加减乘除、自加自减运算:
var a = 1 + 2;
var b = 2 - 1;
var c = 2 * 3;
var d = 4 / 2;
var i++;
var j--;
同时,var声明的变量是可以存储任何数据类型的,其中包括浮点数,浮点数运算也是可以直接运算的:
var a = 2.0 + 3.3;
var b = 2.5 - 0.5;
var c = 2.0 * 2.5;
var d = 6.6 / 2.0;
另外,取余运算也是一样的:
var a;
a = 10 % 2;
同样的复合赋值:
var a = 7;
a += 10;
a -= 5;
a *= 2;
a /= 3;
字符串变量
由双引号和单引号引起的都被视为一个字符串常量,都可以被存进var 声明的变量中:
var myName = "Zhang";
var lastName = 'Externity';
转义符号
code | Output |
---|---|
\’ | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
\n | 换行 |
\r | 回车 |
\t | 制表符 |
\b | 词边界 |
\f | 换页 |
如果想在字符串变量中加入有冲突的字符时,与其他计算机语言一样,需要用到转义字符
当然我们也可以通过单引号和双引号都可以指代字符串的特性,实现同时在字符串中使用两种引号:
var s = ' Fim exclaims to Jacke, "Algebraic!"';
连接字符串
与Java语言一样,JavaScript支持对字符串使用 + 来连接两个字符串:
常量与常量连接:
"My name is Alan, " + "I concatenate.";
自加连接:
var str = "I come first.";
str += "I come second.";
变量与常量连接:
var name = "freeCode";
var str = "Hello" + name + "world.";
变量与变量自加连接:
var name = "awesome!";
var str = "free Code";
str += name;
查询字符串属性
JavaScript特有的方式可以对字符串直接进行查询:
查找字符串长度:
var stringLength = "Alan Peter".length;
表示字符串中的字符:
JavaScript可以直接通过索引的方式直接在字符串中查找到对应索引的字符
var theString = "Charles";
var firstLetter = theString[0];
字符串的“不可变性”
JavaScript中,String中的字符是不可改变的,一旦创建就无法更改其中的内容。但我们可以给他重新赋值。
var str = "Bob";
str[0] = "J";//这是错误的,不可改变其内容。
var str = "Bod";
str = "Job";//只能通过重新赋值的方式改变字符串内容
可以通过访问长度与索引的方式找到倒数位置的字符:
var firstName = "Charles";
var lastLetter = firstName[firstName.length - 1];
数组变量
使用JavaScript的array类型变量,我们可以将多个数据储存在一个地方。
可以直接在数组声明中以方括号开头,以方括号结尾,并在每个条目之间添加一个逗号,如:
var sandwich = ["peenut butter","jelly","bread"];
JavaScript与其他类型计算机语言不同,js支持不同数据类型的数据存储在一个数组内。
var array = ["string",54,null,true];
多维数组
与其他类型计算机语言一样,支持多维数组的存储,但对于计算机的多维数组理解,建议可以当作一个数组内嵌套了一个数组,能够更加方便的理解。
var myArray = [[""Bulls",23],["White Sox",45]];
查找数组属性
同字符串查找属性一样,可以直接通过length查看数组长度。
var array = [1,2,3,4];
var len = array.length;
通过索引访问数组内部数据
var array = [20,60,50];
var data = array[1];
与字符串不同,数组的内部条目是可变的,可以自由更改。
var array = [50,40,30];
array[0] = 15;
多维数组的访问
var arr = [[1,2,3],[4,5,6],[7,8,9],[[10,11,12],13,14]];
arr[3] == [[10,11,12],13,14];
arr[3][0] == [10,11,12];
arr[3][0][1] == 11;
更改数组
JavaScript特有的可添加方法:
将数据附加到数组末尾,通过push函数可以直接实现:
var arr1 = [1,2,3];
arr1.push(4);
var arr2 = ["Stimpson","J","cat"];
arr2.push(["happy","joy"]);
pop()用于从数组末尾弹出一个值,我们可以通过将弹出的值分配给变量来存储它,换句话说就是,pop()从数组最后删除一个元素并返回该元素。
var array = [1,4,6];
var oneDown = array.pop();//此时array为[1,4],oneDown的值为6
pop()总是删除数组的最后一个元素,如果想要删除第一个怎么办?
使用shift()方法,它的工作原理与pop()一样,删除第一个元素并返回该元素。
var array = ["Stimpson","J","cat"];
var removedOne = array.shift();//此时array值为["J","cat"],removedOne为"Stimpson"
如果想要从开头增加元素,我们还可以使用unshift()方法,工作方式与push()相同,在数组开头增加一个元素。
var array = ["Stimpson","J","cat"];
array.unshift("Happy");//此时array的值为["Happy","Stimpson","J","cat"]
扩展运算符
扩展运算符(spread)是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
例如:
const array = [1, 2, 3, 4, 5];
const newArray = [9, ...array, 10];
//此时newArray就相当于:
[9, 1, 2, 3, 4, 5, 10];
当然这也可以应用于参数的传递:
function functionSpeadArray(String ...arr){
}
数组的解构赋值
JS允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
以前,为变量赋值,只能直接指定值。
let a = 1;
let b = 2;
let c = 3;
JS 允许写成下面这样。
let [a, b, c] = [1, 2, 3];
上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。
本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。下面是一些使用嵌套数组进行解构的例子。
let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3
let [ , , third] = ["foo", "bar", "baz"];
third // "baz"
let [x, , y] = [1, 2, 3];
x // 1
y // 3
let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]
let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []
参考自ES6入门,更多学习了解,请前往:https://es6.ruanyifeng.com/#README
数组中的filter方法
filter是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。
Array的filter()接收一个函数,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
例如,在一个Array中,删掉偶数,只保留奇数,可以这么写:
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
r; // [1, 5, 9, 15]
也可以更简便的写法:
const numbers = [1, 2, 3, 4, 5];
const filtered = numbers.filter(n => n % 2 === 0);
filtered === [2, 4];
其中 n => n % 2 === 0 是箭头函数,相当于:
function (n){
return n%2==0;
}
数组中的map方法
这是一种映射方法,map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
const numbers = [1, 2, 3, 4, 5];
const mapped = numbers.map((n, i) => `Unit ${n} for element at index ${i}`);
mapped === ['Unit 1 for element at index 0', 'Unit 2 for element at index 1', 'Unit 3 for element at index 2', 'Unit 4 for element at index 3', 'Unit 5 for element at index 4'];
其中,`` 是反引号,在JavaScript中反引号是模板字符串的意思,具体模板字符串可以前往了解:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Template_literals
数组中的reduce方法
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
const numbers = [1, 2, 3, 4, 5];
const reduced = numbers.reduce((prev, current) => prev + current);
reduced === 15;
除此之外JavaScript还提供了许多对于数组的方法使用,具体学习可前往:
https://www.runoob.com/jsref/jsref-obj-array.html