基本数据类型

string

转意符

方法

slice
  1. let a='wo shi nide bb,wo ai ni'
  2. console.log(a.slice(3,7));//从第几个开始到第几个结束,不包含最后一个
  3. console.log(a);//slice不改变原理的string

substring

不同之处在于,小于 0 的 start 和 end 值在 substring() 中被视为 0。

substr

已经被弃用,谨慎使用

replace
  1. let a='wo shi nide bb,wo ai ni'
  2. console.log(a.replace('shi','bushi'));//把第一个替换成第2个,但是只替换第一个查找到的,全部替换需要用到正则
  3. console.log(a);//不改变原理的string
  1. let a='wo'
  2. console.log(a.replace(a[0],'bushi'));//和索引联动
  3. console.log(a);//不改变原理的string
  1. let a='wo shi ni de haha'
  2. console.log(a.replace(a.slice(0,5),'bushi'));//和slice联动
  3. console.log(a);//不改变原理的string

toUpperCase

全大写呗

toLowCase

全小写呗

concat
  1. let a='wo'
  2. console.log(a.concat('shi','bushi'));//好像可以随便链接多少个
  3. console.log(a);//不改变原理的string

不过如果我想把它前面添加东西岂不是不行?所以还是没有加法好啊

trim

这个就是清空string两边的空白

padStart

这是一个填充方法

  1. let text = "556";
  2. let padded = text.padStart(4,"x");//长度4,不够的用X填充
  3. console.log(padded);
  4. console.log(text);

padEnd

在尾部填充

charAt
  1. var str = "HELLO WORLD";
  2. str.charAt(0); // returns H
  3. var str = "HELLO WORLD";
  4. str[0]; // returns H

有人会问,这2个有啥区别,str[0]只能查询,不能改变

charCodeAt

这是返回的ACLL码

split

拆分字符串变成arrya

  1. let a='today is very nice'
  2. let b=a.split(' ')//以空格拆分
  3. let c=a.split('')//这种其实表示把所有的字符都单独拆分
  4. console.log(b);
  5. console.log(c);
  6. console.log(a);//并不会改变a本身

结果

  1. [ 'today', 'is', 'very', 'nice' ]
  2. [
  3. 't', 'o', 'd', 'a', 'y',
  4. ' ', 'i', 's', ' ', 'v',
  5. 'e', 'r', 'y', ' ', 'n',
  6. 'i', 'c', 'e'
  7. ]
  8. today is very nice

repeat
  1. let string = 'love'
  2. console.log(string.repeat(10)) // lovelovelovelovelovelovelovelovelovelove

search

indexOf()
  1. let a='today is very nice today is hot'
  2. console.log(a.indexOf('nice'));//只是输出第一个查到的index,如果没有返回-1

值得考虑的是,我们如何得到所有搜索的index

  1. let a='today is very nice today is hot'
  2. let arr=[]
  3. let num=0
  4. let atm=a.indexOf('o')
  5. while(atm!=-1){
  6. arr.push(atm)
  7. num=atm
  8. a=a.slice(num)
  9. atm=a.indexOf('o',num)
  10. }
  11. console.log(arr);

从某个位置开始

  1. let a='today is very nice today is hot'
  2. console.log(a.indexOf('nice'10));//只是输出第一个查到的index,如果没有返回-1

第2个参数表示从哪个位置开始

lastIndexOf()

从尾部开始第一个

search
  1. let str = "Please locate where 'locate' occurs!";
  2. str.search("locate");

和indexof一样的
不同点:
1.serch不能指定从某个 位置开始
2.serch可以用正则表达式来搜索

match

match() 方法在字符串中搜索与正则表达式的匹配项,并将匹配项作为 Array 对象返回。
所以,如果我们想知道一个字符串里面有多少个搜查项,用这个挺不错

  1. let text = "The rain in SPAIN stays mainly in the plain";
  2. console.log(text.match(/ain/g));
  3. [ 'ain', 'ain', 'ain' ]

如果没有普匹配想,那么返回null

includes

这个简单就是判断是否包含某个字段,返回boolen

  1. let text = "Hello world, welcome to the universe.";
  2. text.includes("world");
  3. true
  4. let text = "Hello world, welcome to the universe.";
  5. text.includes("world", 12);//第2个参数是开始的位置

startwith
  1. let text = "Hello world, welcome to the universe.";
  2. text.startsWith("world", 6) // Returns true

endswith
  1. let text = "Hello world, welcome to the universe.";
  2. text.endsWith("world", 11);//前11个开始搜索

模板文字/格式化字符串

  1. let r=0
  2. let g=200
  3. let bb=100
  4. let eve=`color:rgb(${r},${g},${bb});`

number

值的范围

运算

Operator Description
+ Addition
- Subtraction
* Multiplication
** Exponentiation (ES2016
)
/ 除法,但不是取整
% 取整
++ Increment
Decrement


取整的方法

  1. let a=6.5
  2. console.log(Math.trunc(a));//直接去除小数部分6
  3. console.log(Math.round(a));//四舍五入7
  4. console.log(Math.ceil(a));//向上取整7

与string的运算

  1. let x = 5 + 5;
  2. let y = "5" + 5;
  3. let z = "Hello" + 5;

结果

  1. 10
  2. 55
  3. Hello5

num+str =string
如果一个是str一个是num,那么 减法,乘法,除法最后的结果都是num

NaN

NaN 是 JavaScript 保留字,表示数字不是合法数字。 尝试使用非数字字符串进行算术运算将导致 NaN(非数字):

NaN is a number: typeof NaN returns number:

infinitty

Infinity(或 -Infinity)是 JavaScript 将返回的值,如果您计算一个超出最大可能数字的数字。
除以 0(零)也产生 Infinity:

  1. let x = 2 / 0;
  2. let y = -2 / 0;

16进制

如果数字常量前面有 0x,JavaScript 会将其解释为十六进制。

  1. let x = 0xFF;

默认情况下,JavaScript 将数字显示为以 10 为底的小数。 但是您可以使用 toString() 方法输出从 2 到 36 的数字。 十六进制是以 16 为底。十进制是以 10 为底。八进制是以 8 为底。二进制是以 2 为底。

  1. let myNumber = 32;
  2. myNumber.toString(32);
  3. myNumber.toString(16);
  4. myNumber.toString(12);
  5. myNumber.toString(10);
  6. myNumber.toString(8);
  7. myNumber.toString(2);

method

tostring
  1. let x = 123;
  2. x.toString();
  3. (123).toString();
  4. (100 + 23).toString();

就是转换成str

toexponential

toExponential() 返回一个字符串,带有一个四舍五入的数字并使用指数表示法写入。 一个参数定义小数点后面的字符数:

  1. let x = 9.656;
  2. x.toExponential(2);//9.66e+0
  3. x.toExponential(4);
  4. x.toExponential(6);

我感觉用到的地方不是很多吧,

tofixed
  1. let x = 9.656;
  2. let b=x.toFixed(2)
  3. console.log(b);//9.66
  4. console.log(typeof(b));//sting

也是4舍5入

toprecision
  1. let x = 9.6567856;
  2. let b=x.toPrecision(4)//整数加小数一共4位,有四舍五入

valueof

在 JavaScript 中,数字可以是原始值(typeof = number)或对象(typeof = object)。 valueOf() 方法在 JavaScript 内部用于将 Number 对象转换为原始值。 没有理由在您的代码中使用它。3
All JavaScript data types have a valueOf() and a toString() method.

Number.isInterger
  1. let a=10
  2. console.log(Number.isInteger(a));//true
  3. Number.isInteger(10.5); // returns false

Number.isSafeInteger()

安全整数是可以精确表示为双精度数的整数。 如果参数是安全整数,则 Number.isSafeInteger() 方法返回 true。

  1. Number.isSafeInteger(10); // returns true
  2. Number.isSafeInteger(12345678901234567890); // returns false

Safe integers are all integers from -(253 - 1) to +(253 - 1).
This is safe: 9007199254740991. This is not safe: 9007199254740992.

全局方法

number

返回一个从其参数转换而来的数字。

  1. Number(true);
  2. Number(false);
  3. Number("10");
  4. Number(" 10");
  5. Number("10 ");
  6. Number(" 10 ");
  7. Number("10.33");
  8. Number("10,33");
  9. Number("10 33");
  10. Number("John");
  11. 1
  12. 0
  13. 10
  14. 10
  15. 10
  16. 10
  17. 10.33
  18. NaN
  19. NaN
  20. NaN

parseFloat

解析其参数并返回一个浮点数

  1. parseFloat("10");
  2. parseFloat("10.33");
  3. parseFloat("10 20 30");
  4. parseFloat("10 years");
  5. parseFloat("years 10");
  6. 10
  7. 10.33
  8. 10
  9. 10
  10. NaN

parseInt

解析其参数并返回一个整数

  1. parseInt("-10");
  2. parseInt("-10.33");
  3. parseInt("10");
  4. parseInt("10.33");
  5. parseInt("10 20 30");
  6. parseInt("10 years");
  7. parseInt("years 10");
  8. -10
  9. -10
  10. 10
  11. 10
  12. 10
  13. 10
  14. NaN

属性

max_value

min_value

positive_infinity

negative_infinity

NaN

NaN 是 JavaScript 保留字,表示数字不是合法数字。 尝试使用非数字字符串进行算术运算将导致 NaN(非数字):
数字属性不能用于变量

object

getters setters

  1. var person = {
  2. firstName: "John",
  3. lastName : "Doe",
  4. language : "NO",
  5. get lang() {
  6. return this.language;
  7. },
  8. set lang(value) {
  9. this.language = value;
  10. }
  11. };
  12. // Set an object property using a setter:
  13. person.lang = "en";
  14. // Display data from the object using a getter:
  15. document.getElementById("demo").innerHTML = person.lang;

defineProperty()

它允许您定义对象属性和/或更改属性的值和/或元数据。

  1. // Create an Object:
  2. var person = {
  3. firstName: "John",
  4. lastName : "Doe",
  5. language : "NO",
  6. };
  7. // Change a Property:
  8. Object.defineProperty(person, "language", {
  9. value: "EN",
  10. writable : true,
  11. enumerable : true, //如果改false就不会读取出来了
  12. configurable : true
  13. });
  14. // Enumerate Properties
  15. var txt = "";
  16. for (var x in person) {
  17. txt += person[x] + "<br>";
  18. }
  19. document.getElementById("demo").innerHTML = txt;
  1. /// Create an Object:
  2. var person = {
  3. firstName: "John",
  4. lastName : "Doe",
  5. language : "NO"
  6. };
  7. // Change a Property:
  8. Object.defineProperty(person, "language", {
  9. get : function() { return language },
  10. set : function(value) { language = value.toUpperCase()} //竟然可以直接设置它的变量更改的化都是大写
  11. });
  12. // Change Language
  13. person.language = "en";
  14. // Display Language
  15. document.getElementById("demo").innerHTML = person.language;

object.entires

  1. const person = {
  2. firstName: "John",
  3. lastName: "Doe",
  4. age: 50,
  5. eyeColor: "blue"
  6. };
  7. let a=Object.entries(person)
  8. console.log(a)
  9. //return 返回的是一个数组
  10. [
  11. [ 'firstName', 'John' ],
  12. [ 'lastName', 'Doe' ],
  13. [ 'age', 50 ],
  14. [ 'eyeColor', 'blue' ]
  15. ]

Object.entries() makes it simple to use objects in loops:

  1. const fruits = {Bananas:300, Oranges:200, Apples:500};
  2. let text = "";
  3. for (let [fruit, value] of Object.entries(fruits)) {
  4. text += fruit + ": " + value + "
  5. ";
  6. }

Object.entries() also makes it simple to convert objects to maps:

  1. const fruits = {Bananas:300, Oranges:200, Apples:500};
  2. const myMap = new Map(Object.entries(fruits));

object.values

Object.values 类似于 Object.entries,但返回对象值的单维数组:

  1. const person = {
  2. firstName : "John",
  3. lastName : "Doe",
  4. age : 50,
  5. eyeColor : "blue"
  6. };
  7. document.getElementById("demo").innerHTML = Object.values(person);
  8. [ 'John', 'Doe', 50, 'blue' ]

Object Rest Properties

  1. let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
  2. x; // 1
  3. y; // 2
  4. z; // { a: 3, b: 4 }

symbol

JavaScript 符号是一种原始数据类型,就像数字、字符串或布尔值一样。 它代表一个唯一的“隐藏”标识符,没有其他代码可以意外访问。 例如,如果不同的编码人员想要将 person.id 属性添加到属于第三方代码的 person 对象,他们可以混合彼此的值。 使用 Symbol() 创建唯一标识符,解决了这个问题:

  1. const person = {
  2. firstName: "John",
  3. lastName: "Doe",
  4. age: 50,
  5. eyeColor: "blue"
  6. };
  7. let id = Symbol('id');
  8. person[id] = 140353;
  9. // Now person[id] = 140353
  10. // but person.id is still undefined

null

undefined

bigint

function

函数的访问

  1. function run(x){
  2. return x+2
  3. }
  4. console.log(run); //这个访问的是函数对象
  5. console.log(run(4));//这个访问的是函数结果

默认参数值

  1. function myFunction(x, y = 10) {
  2. // y is 10 if not passed or undefined
  3. return x + y;
  4. }
  5. myFunction(5); // will return 15

剩余参数

  1. function sum(...args) {
  2. let sum = 0;
  3. for (let arg of args) sum += arg;
  4. return sum;
  5. }
  6. let x = sum(4, 9, 16, 25, 29, 100, 66, 77);

Async

event

arrays

  1. let x=[run(),'x',run] //arrya里面是可以是object的本身或者运行的结果都是可以的
  2. function run(){
  3. console.log('i am run 1');
  4. }

创建可以用new来创建,但是new创建的时候可以有一个特殊的作用

  1. const a=new Array(5)
  2. console.log(a);
  3. [ <5 empty items> ] //等于说里面只有一个数字的时候就是创建了相对应数字的空集合

属性

length

sort

判断是否为数组

Arrya.isArrya(a)

  1. const a=[1,2,3]
  2. console.log(Array.isArray(a));
  3. true

a instanceof Array

  1. const a=[1,2,3]
  2. let b=a instanceof Array
  3. console.log(b);
  4. true

方法

toString()

  1. const a=[1,2,3]
  2. console.log(a.toString());.
  3. 1,2,3

join()

  1. const a=[1,2,3]
  2. console.log(a.join("|"));
  3. 1|2|3

pop

  1. const a=[1,2,3]
  2. console.log(a.pop());
  3. console.log(a);
  4. 3
  5. [ 1, 2 ]

push

  1. const a=[1,2,3]
  2. let b=a.push(4)//返回的是新数组的长度
  3. console.log(b);
  4. console.log(a);
  5. 4
  6. [ 1, 2, 3, 4 ]

shift

  1. const a=[0,1,2,3]
  2. let b=a.shift()//被移除的第一个是啥
  3. console.log(b);
  4. console.log(a);
  5. 0
  6. [ 1, 2, 3 ]

unshift

添加呗 除了a.unshif()返回的是新的数组的长度

delete

  1. const a=[0,1,2,3]
  2. delete a[2]
  3. console.log(a);
  4. [ 0, 1, <1 empty item>, 3 ] //删除的地方就是空位

concat

  1. const a=[0,1,2,3]
  2. const b=[4,5,6]
  3. const c=a.concat(b) //注意不能用加号,不然就会自动转换成string了
  4. console.log(c);
  5. [
  6. 0, 1, 2, 3, 4, 5, 6
  7. ]
  1. const arr1 = ["Cecilie", "Lone"];
  2. const arr2 = ["Emil", "Tobias", "Linus"];
  3. const arr3 = ["Robin", "Morgan"];
  4. const myChildren = arr1.concat(arr2, arr3);

splice

  1. const a=[0,1,2,3]
  2. a.splice(1,1,88,99)
  3. console.log(a);
  4. [ 0, 88, 99, 2, 3 ]

这是一个在指定的位置添加新的元素的方法,
参数1:从哪个位置开始添加
参数2:要移除几个原来的元素
参数3-n:是要添加的元素
如果没有第3个参数就是移除指定位置的几个元素

slice

和string的一样用

sort

sort()

  1. let a=[2,36,9,0,76,90]
  2. a.sort()
  3. console.log(a);

这里的排序都是按首字母来排的,挺2,没啥大用

sort(function(a, b){return a - b})

  1. let a=[2,36,9,0,76,90]
  2. a.sort((a,b)=>{return a-b})
  3. console.log(a);
  4. [ 0, 2, 9, 36, 76, 90 ]
  1. let a=[2,36,9,0,76,90]
  2. a.sort((a,b)=>{return b-a})
  3. console.log(a);
  4. [ 90, 76, 36, 9, 2, 0 ]

reverse

indexof lastindeof

和string一样用

迭代

foreach

  1. let a=[2,36,9,0,76,90]
  2. a.forEach((x,i)=>{
  3. console.log(`${i+1}----${x}`);
  4. })
  5. 1----2
  6. 2----36
  7. 3----9
  8. 4----0
  9. 5----76
  10. 6----90
  1. function myFunction(value, index, array) {
  2. txt += value + "<br>";
  3. }

map

  1. let a=[2,36,9,0,76,90]
  2. let b=a.map((x)=>{
  3. return x*2
  4. })
  5. console.log(b);
  6. [ 4, 72, 18, 0, 152, 180 ]

map除了可以和forEach相同的用法外,它还可以return然后生成一个新的arrya

filter

  1. let a=[2,36,9,0,76,90]
  2. let b=a.filter((x)=>{
  3. return x>2
  4. })
  5. console.log(b);
  6. [ 36, 9, 76, 90 ]

它返回一个满足条件的数组

reduce

  1. let a=[1,2,3,4,5,6,7,8,9,10]
  2. let b=a.reduce((tot,i)=>{
  3. return tot+i
  4. })
  5. console.log(b);

reduce的返回函数有4个参数,不同的是第一个参数是total,total的意思是,每一次循环total的值,total的首个值肯定是arrya[0]。所以上面的意思就是1-10的累加。

  1. let a=[1,2,3,4,5,6,7,8,9,10]
  2. let b=a.filter((x)=>{ //先筛选出偶数
  3. return x%2==0
  4. }).reduce((tot,i)=>{ //再来计算偶数的累乘
  5. return tot*i
  6. })
  7. console.log(b);

reduceRight()

从右向左运算···

every

  1. const a=[0,1,2,3,20,10,11,4,99,5]
  2. let b=a.every((x)=>{
  3. return x>5 //检测所有的元素是否符合,只要不符合就是false
  4. })
  5. console.log(b); //false

some

  1. const a=[0,1,2,3,20,10,11,4,99,5]
  2. let b=a.some((x)=>{
  3. return x>5 //只要有符合的就返回true
  4. })
  5. console.log(b); //true

find

  1. const a=[0,1,2,3,20,10,11,4,99,5]
  2. let b=a.find((x)=>{
  3. return x>5 //返回第一个满足条件的元素
  4. })
  5. console.log(b); //20

findindex

  1. const a=[0,1,2,3,20,10,11,4,99,5]
  2. let b=a.findIndex((x)=>{
  3. return x>5 //返回第一个满足条件的index
  4. })
  5. console.log(b); //4

array.from

  1. let a='sdsalsad'
  2. let b=Array.from(a) //不就是把字符串分解嘛
  3. console.log(b);
  4. [
  5. 's', 'd', 's',
  6. 'a', 'l', 's',
  7. 'a', 'd'
  8. ]

array.keys

Array.keys() 方法返回一个带有数组键的 Array Iterator 对象。

  1. const fruits = ["Banana", "Orange", "Apple", "Mango"];
  2. const keys = fruits.keys();
  3. for (let x of keys) {
  4. text += x + "<br>";
  5. }

array.entries

生成一个key/value的迭代器

  1. const fruits = ["Banana", "Orange", "Apple", "Mango"];
  2. const f = fruits.entries();
  3. for (let x of f){
  4. console.log(x);
  5. }
  6. [ 0, 'Banana' ]
  7. [ 1, 'Orange' ]
  8. [ 2, 'Apple' ]
  9. [ 3, 'Mango' ]

Array includes()

  1. const fruits = ["Banana", "Orange", "Apple", "Mango"];
  2. fruits.includes("Mango"); // is true

Array.includes() 允许检查 NaN 值。与 Array.indexOf() 不同。

date

new Date()

  1. new Date()
  2. new Date(year, month, day, hours, minutes, seconds, milliseconds)
  3. new Date(milliseconds)
  4. new Date(date string)

注意:JavaScript 从 0 到 11 计算月份: 一月 = 0。 十二月 = 11。
指定高于 11 的月份,不会导致错误,但会将溢出添加到下一年:

formats

Type Example
ISO Date “2015-03-25” (The International Standard)
Short Date “03/25/2015”
Long Date “Mar 25 2015” or “25 Mar 2015”

getdate

Method Description
getFullYear() Get the year as a four digit number (yyyy)
getMonth() Get the month as a number (0-11)
getDate() Get the day as a number (1-31)
getHours() Get the hour (0-23)
getMinutes() Get the minute (0-59)
getSeconds() Get the second (0-59)
getMilliseconds() Get the millisecond (0-999)
getTime() Get the time (milliseconds since January 1, 1970)
getDay() Get the weekday as a number (0-6)
Date.now() Get the time. ECMAScript 5.
  1. let a=Date.now()//现在时间的长计数形式
  2. console.log(a);
  3. 1652190464811

setdate

Method Description
setDate() Set the day as a number (1-31)
setFullYear() Set the year (optionally month and day)
setHours() Set the hour (0-23)
setMilliseconds() Set the milliseconds (0-999)
setMinutes() Set the minutes (0-59)
setMonth() Set the month (0-11)
setSeconds() Set the seconds (0-59)
setTime() Set the time (milliseconds since January 1, 1970)
  1. const d = new Date();
  2. d.setFullYear(2020);
  3. const d = new Date();
  4. d.setFullYear(2020, 11, 3);
  5. const d = new Date();
  6. d.setMonth(11); //0-11
  7. const d = new Date();
  8. d.setHours(22); //0-23
  1. const d = new Date();
  2. d.setTime(1829919)
  3. console.log(d);

这个可以把数字转换成时间

math

属性

  1. Math.E // returns Euler's number
  2. Math.PI // returns PI
  3. Math.SQRT2 // returns the square root of 2
  4. Math.SQRT1_2 // returns the square root of 1/2
  5. Math.LN2 // returns the natural logarithm of 2
  6. Math.LN10 // returns the natural logarithm of 10
  7. Math.LOG2E // returns base 2 logarithm of E
  8. Math.LOG10E // returns base 10 logarithm of E

Math.round()

  1. let a=Math.round(4.6)
  2. let b=Math.round(4.5)
  3. let c=Math.round(4.4)
  4. console.log(a);
  5. console.log(b);
  6. console.log(c);

注意是四舍5入到整数

Math.ceil()

向上取整

  1. Math.ceil(4.9);//5
  2. Math.ceil(4.7);//5
  3. Math.ceil(4.4);//5
  4. Math.ceil(4.2);//5
  5. Math.ceil(-4.2);//-4

Math.floor()

向下取证

  1. Math.floor(4.9);//4
  2. Math.floor(4.7);//4
  3. Math.floor(4.4);//4
  4. Math.floor(4.2);//4
  5. Math.floor(-4.2);//-5

Math.trunc()

只保留整数部分

  1. Math.trunc(4.9);//4
  2. Math.trunc(4.7);//4
  3. Math.trunc(4.4);//4
  4. Math.trunc(4.2);//4
  5. Math.trunc(-4.2);//-4

Math.sign()

返回正负0

  1. Math.sign(-4);//-1
  2. Math.sign(0);//0
  3. Math.sign(4);//1

Math.pow()

次方计算82

  1. Math.pow(8, 2);

Math.sqrt()

数学sqrt(x)返回x的平方根:

  1. Math.sqrt(64);//8

Math.abs()

数学abs(x)返回x的绝对(正)值:

  1. Math.abs(-4.7);//4.7

Math.sin()

数学sin(x)返回角度x(以弧度为单位)的正弦(介于-1和1之间的值)。 如果要使用度而不是弧度,则必须将度转换为弧度: 以弧度为单位的角度=以度为单位的角度xπ/180。

  1. Math.sin(90 * Math.PI / 180); // returns 1 (the sine of 90 degrees)

Math.cos()

数学cos(x)返回角x(以弧度为单位)的余弦(介于-1和1之间的值)。 如果要使用度而不是弧度,则必须将度转换为弧度: 以弧度为单位的角度=以度为单位的角度xπ/180。

  1. Math.cos(0 * Math.PI / 180); // returns 1 (the cos of 0 degrees)

Math.min() and Math.max()

数学敏()和数学。max()可用于在参数列表中查找最低或最高值:

  1. Math.min(0, 150, 30, 20, -8, -200);
  2. Math.max(0, 150, 30, 20, -8, -200);

Math.random()

数学random()返回一个介于0(包括)和1(不包括)之间的随机数:

  1. Math.random();

Math.log()

数学log(x)返回x的自然对数。 自然对数返回达到一定增长水平所需的时间:

  1. Math.log(1);//0

Math.log2()

x的以2为底的对数。

  1. Math.log2(8);//3

Math.log10()

以x的10为底的对数。

  1. Math.log10(1000);//3

random

  1. Math.floor(Math.random() * 10);
  1. Math.floor(Math.random() * 11);
  1. Math.floor(Math.random() * 100);
  1. Math.floor(Math.random() * 10) + 1;
  1. function getRndInteger(min, max) { //不包含头,尾
  2. return Math.floor(Math.random() * (max - min) ) + min;
  3. }
  4. function getRndInteger(min, max) { //包含头尾
  5. return Math.floor(Math.random() * (max - min + 1) ) + min;
  6. }

if else

  1. if (condition1) {
  2. // block of code to be executed if condition1 is true
  3. } else if (condition2) {
  4. // block of code to be executed if the condition1 is false and condition2 is true
  5. } else {
  6. // block of code to be executed if the condition1 is false and condition2 is false
  7. }

循环

switch

  1. switch(expression) {
  2. case x:
  3. // code block
  4. break;
  5. case y:
  6. // code block
  7. break;
  8. default:
  9. // code block
  10. }
  1. switch (new Date().getDay()) {
  2. case 4:
  3. case 5:
  4. text = "Soon it is Weekend";
  5. break;
  6. case 0:
  7. case 6:
  8. text = "It is Weekend";
  9. break;
  10. default:
  11. text = "Looking forward to the Weekend";
  12. }

for

  1. for (let i = 0, len = cars.length, text = ""; i < len; i++) {
  2. text += cars[i] + "<br>";
  3. }

可以看到如果声明变量的时候 ,如果语句过多,是可以用逗号隔开的

  1. let i = 2;
  2. let len = cars.length;
  3. let text = "";
  4. for (; i < len; i++) {
  5. text += cars[i] + "<br>";
  6. }
  1. let a=0
  2. for(;a<10;){
  3. console.log(a);
  4. a++
  5. }

这个例子可以看到即使3个条件都不写,也是可以工作的,但是你要在外部和内部加上条件,其实道理是一样的

for in

  1. let a={name:'xiaoyu',age:56}
  2. let b=[5,6,7,8,4,3,4]
  3. for(i in a){
  4. console.log(i);
  5. }
  6. for (i in b){
  7. console.log(i);
  8. }

主要是给object 和arrya用的,在object中是key,在arrya中是索引值
看下输出结果就知道了

  1. name
  2. age
  3. 0
  4. 1
  5. 2
  6. 3
  7. 4
  8. 5
  9. 6

for of

  1. const cars = ["BMW", "Volvo", "Mini"];
  2. let text = "";
  3. for (let x of cars) { //x地表数组里的每一个元素
  4. text += x;
  5. }
  6. console.log(text);
  1. const cars = "JavaScript"
  2. for (let x of cars) {
  3. console.log(x); //x带表每一个字符
  4. }

while

  1. while (i < 10) {
  2. text += "The number is " + i;
  3. i++;
  4. }
  1. do {
  2. text += "The number is " + i;
  3. i++;
  4. }
  5. while (i < 10);

break

一般的break只是跳出当前的循环层
这里我们看下label的运用

  1. var num=0;
  2. outter: //label语句,名字可自定义
  3. for(var i=0;i<10;i++){
  4. for(var j=0;j<10;j++){
  5. if(i==5&&j==5){
  6. break ; //跳出当前循环,但会继续执行外循环
  7. }
  8. num++;
  9. }
  10. }
  11. document.write(num); //95
  12. ————————————————
  13. var num=0;
  14. outter:
  15. for(var i=0;i<10;i++){
  16. for(var j=0;j<10;j++){
  17. if(i==5&&j==5){
  18. break outter; //退出内部循环,指向outter,即外循环,同时退出外循环
  19. }
  20. num++;
  21. }
  22. }
  23. document.write(num); //55

set

它是一个集合,但是它里面的值只能唯一,不能重复
set集合里面不存在索引,里面没有什么顺序的问题

  1. const a=['a','a',9,8,7]
  2. const b=new Set(a)
  3. console.log(b);

它的输出结果为

  1. Set(4) { 'a', 9, 8, 7 }

可以看到a只有一个了,注意它的结果是一个大括号,和arrya不同

增删改查

  1. let a=[9,9,2,4,5,5,4]
  2. const b=new Set(a)
  3. b.add(10) //增
  4. b.delete(9)//删
  5. console.log(b.has(12));//查,如果有就ture

没错,set里面的值真的是不能够改掉,这可能是set做的安全性的问题。

size

  1. console.log(b.size);//就是里面有几个值

values

map

  1. let a=new Map()
  2. a.set(1,'xiao')
  3. a.set('xiao',12)
  4. console.log(a);

输出的结果

  1. Map(2) { 1 => 'xiao', 'xiao' => 12 }

map就是一个键值对,但是和object不同的是,这里的key可类型的。和set一样,里面的key是唯一的

增删改查

  1. let a=new Map()
  2. a.set('age',16)//增
  3. a.set('name','xiaoyu')
  4. a.delete('age')//删
  5. a.set('name','gaga')//改
  6. a.get('name')//可以查这个key的值
  7. console.log(a.has('name'));//查

size

  1. console.log(b.size);//就是里面有几个值

forEach

  1. a.forEach((a,b)=>{
  2. console.log(`${a}--${b}`);
  3. })//参数1表示值,b表示key

entries()

Returns an iterator with the [key, value] pairs in a Map

typeof

  1. typeof "John" // Returns "string"
  2. typeof 3.14 // Returns "number"
  3. typeof NaN // Returns "number"
  4. typeof false // Returns "boolean"
  5. typeof [1,2,3,4] // Returns "object"
  6. typeof {name:'John', age:34} // Returns "object"
  7. typeof new Date() // Returns "object"
  8. typeof function () {} // Returns "function"
  9. typeof myCar // Returns "undefined" *
  10. typeof null // Returns "object"

类型转换

string转num

  1. Number("3.14") // returns 3.14
  2. Number(" ") // returns 0
  3. Number("") // returns 0
  4. Number("99 88") // returns NaN

可以看到如果不符合num的格式,那么就会出现NaN

num转string

  1. let a=23
  2. let b=String(a)//方式1
  3. let c=a.toString()//方式2
  4. console.log(typeof(b));
  5. console.log(typeof(c));

date转num,string

  1. d = new Date();
  2. Number(d) // returns 1404568027739
  3. d = new Date();
  4. d.getTime() // returns 1404568027739
  1. String(Date()) // returns "Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)"
  2. Date().toString() // returns "Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)"

boolean转num,string

  1. Number(false) // returns 0
  2. Number(true) // returns 1
  1. false.toString() // returns "false"
  2. true.toString() // returns "true"

自动类型转换

  1. 5 + null // returns 5 because null is converted to 0
  2. "5" + null // returns "5null" because null is converted to "null"
  3. "5" + 2 // returns "52" because 2 is converted to "2"
  4. "5" - 2 // returns 3 because "5" is converted to 5
  5. "5" * "2" // returns 10 because "5" and "2" are converted to 5 and 2

按位运行

正则表达式

基本格式

  1. /pattern/modifiers;
Modifier Description
i 执行不区分大小写的匹配
g 执行全局匹配(查找所有匹配,而不是在第一次匹配后停止)
m 执行多行匹配
[abc] Find any of the characters between the brackets
[0-9] Find any of the digits between the brackets
(x|y) Find any of the alternatives separated with |
Metacharacter Description
\d Find a digit
\s Find a whitespace character
\b Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b
\uxxxx Find the Unicode character specified by the hexadecimal number /\u0057/g
n+ Matches any string that contains at least one n
n* Matches any string that contains zero or more occurrences of n
n? Matches any string that contains zero or one occurrences of n

测试

  1. const pattern = /e/;
  2. pattern.test("The best things in life are free!");//返回Boolean

exec

  1. let b=/e/.exec("The best things in life are free!");
  2. console.log(b);

会返回一个对象,
[
‘e’,
index: 2,
input: ‘The best things in life are free!’,
groups: undefined
]

Errors

Throw, and Try…Catch…Finally

  1. <p id="demo"></p>
  2. <script>
  3. try {
  4. adddlert("Welcome guest!");
  5. }
  6. catch(err) {
  7. document.getElementById("demo").innerHTML = err.message;
  8. }
  9. </script>
  1. try {
  2. Block of code to try
  3. }
  4. catch(err) {
  5. Block of code to handle errors
  6. }
  7. finally {
  8. Block of code to be executed regardless of the try / catch result
  9. }

throw

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <p>Please input a number between 5 and 10:</p>
  5. <input id="demo" type="text">
  6. <button type="button" onclick="myFunction()">Test Input</button>
  7. <p id="p01"></p>
  8. <script>
  9. function myFunction() {
  10. const message = document.getElementById("p01");
  11. message.innerHTML = "";
  12. let x = document.getElementById("demo").value;
  13. try {
  14. if(x == "") throw "empty"; //throw的内容就是err
  15. if(isNaN(x)) throw "not a number";
  16. x = Number(x);
  17. if(x < 5) throw "too low";
  18. if(x > 10) throw "too high";
  19. }
  20. catch(err) {
  21. message.innerHTML = "Input is " + err;
  22. }
  23. }
  24. </script>
  25. </body>
  26. </html>

strict

“严格使用”;定义JavaScript代码应在“严格模式”下执行。
“use strict”指令是ECMAScript版本5中的新指令。 它不是一个语句,而是一个文字表达式,被早期版本的JavaScript忽略。 “使用严格”的目的是指示代码应在“严格模式”下执行。 例如,在严格模式下,不能使用未声明的变量。 除Internet Explorer 9及更低版本外,所有现代浏览器都支持“严格使用”:

声明严格模式 严格模式通过添加“使用严格”来声明;到脚本或函数的开头。 在脚本开头声明,它具有全局作用域(脚本中的所有代码都将以严格模式执行):

  1. "use strict";
  2. x = 3.14; // This will cause an error because x is not declared
  3. "use strict";
  4. myFunction();
  5. function myFunction() {
  6. y = 3.14; // This will also cause an error because y is not declared
  7. }

类class

  1. class Car{
  2. constructor(a,b){ //构造函数
  3. this.a=a //初始化数据
  4. this.b=b
  5. this.name='xiaoyu' //也可以直接定义内部属性
  6. }
  7. run(){ //内部方法
  8. console.log(`${this.a}--${this.b}`);
  9. }
  10. }
  11. let a=new Car('aodi','bmw')
  12. a.run()
  13. console.log(a.name);

modules

  1. export const name = "Jesse";
  2. export const age = 40;

在需要导出的js 前面加export,这种是在写单行的时候就export了,

  1. const name = "Jesse";
  2. const age = 40;
  3. export {name, age}; //这种是底部统一export

default export

每个文件只能有一个默认导出

  1. const message = () => {
  2. const name = "Jesse";
  3. const age = 40;
  4. return name + ' is ' + age + 'years old.';
  5. };
  6. export default message;

import

我们可以在任意的js文件中把export的js文件导入到我们自己写的js文件中

  1. import { name, age } from "./person.js";
  1. import message from "./message.js";

JSON

  1. "firstName":"John"
  1. {"firstName":"John", "lastName":"Doe"}
  1. "employees":[
  2. {"firstName":"John", "lastName":"Doe"},
  3. {"firstName":"Anna", "lastName":"Smith"},
  4. {"firstName":"Peter", "lastName":"Jones"}
  5. ]

json to object

  1. let text = '{ "employees" : [' +
  2. '{ "firstName":"John" , "lastName":"Doe" },' +
  3. '{ "firstName":"Anna" , "lastName":"Smith" },' +
  4. '{ "firstName":"Peter" , "lastName":"Jones" } ]}';
  5. const obj=JSON.parse(text)
  6. console.log(obj);

js to json

  1. var obj = {name:"John", age:30, city:"New York"};
  2. var myJSON = JSON.stringify(obj);

async

意思就是异步编程

setTimeout

  1. setTimeout(myFunction, 3000);//执行到这一步的时候延迟3秒后执行function
  2. function myFunction() {
  3. document.getElementById("demo").innerHTML = "I love You !!";
  4. }

DOM

image.png