Loading

day 53 前端基础之JavaScript语法

1 JavaScript概述

1.1 简介

1.js也是一门编程语言,它也是可以写后端代码的

2.js跟java一毛钱关系都没有,纯粹是为了蹭当时java的热度

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

JavaScript 是脚本语言
JavaScript 是一种轻量级的编程语言。
JavaScript 是可插入 HTML 页面的编程代码。
JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。
JavaScript,通常会简称为'JS', 是一种浏览器脚本语言。

JavaScript是一种脚本编程语言,是一种解释性语言,JavaScript的语法结构与C++、java十分类似

JavaScript是弱类型语言
JavaScript是事件驱动的语言
JavaScript是一种基于对象的语言

JavaScript具有跨平台性。
JavaScript具有安全性与简单性

JavaScript由三大部分组成,分别为:
    *浏览器标准语言核心语法
    BOM 浏览器对象模型
    DOM 文档对象模型

1.2 JavaScript引入方式

1.2.1 Script标签内写代码

.script标签内部直接书写js代码

<script>
  // 在这里写你的JS代码
</script>

1.2.2 引入额外的JS文件

script标签src属性引入外部js代码

<script src="myscript.js"></script>

1.3 JavaScript语言规范

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

// 单行注释
---------------
/*
多行注释1
多行注释2
多行注释3
*/

1.3.2 结束符

js是以分号作为语句的结束,但是如果你不写分号,问题也不大,也能够正常执行,但是它就相当于没有结束符

2 js学习流程

任何编程语言学习流程都是这样:

  • 变量
  • 数据类型
  • 流程控制
  • 函数
  • 对象
  • 内置方法/模块

3 JavaScript语言基础

3.1 变量

3.1.1 变量声明

  1. JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
  2. 声明变量使用:var 变量名; 的格式来进行声明

js变量的命名规范

1.变量名只能是 
		数字、字母、下划线、$
    
2.变量名命名规范(不遵循也可以)
		1.js中推荐使用驼峰式命名
			userName
			dataOfDb
		2.python推荐使用下划线的方式
			user_name
			data_of_db
		3.不能用关键字作为变量名

js变量的书写位置

1.可以单独开设js文件书写
2.还可以直接在浏览器提供的console界面书写
		在用浏览器书写js的时候,左上方的清空按钮只是清空当前页面,代码其实还在
		如果你想要重新来,最好重新开设一个 页面
		(在使用浏览器书写,你自己的js代码的时候推荐你在,自己的html页面打开)

在js中,首次定义一个变量名的时候需要用关键字声明

	1.关键字var
		var name='jason'
	2.ES6新增了let命令,用于声明变量。其用法类似于var,但是所声明的变量只在let命令所在的代码块内有效。例如:for循环的计数器就很适合使用let命令。如果你的编辑器支持的版本是5.1那么无法使用let,如果是6.0则向下兼容 var let
		for (let i=0;i<arr.length;i++){...}

3.1.2 常量

ES6新增const用来声明常量。一旦声明,其值就不能改变。

# python中没有真正意义上的常量 默认全大写就是表示常量
# js中是有真正意义上的常量的
const PI = 3.1415;
PI    // 3.1415

PI = 3
// TypeError: "PI" is read-only

3.2 数据类型

js也是一门面向对象,的编程语言,即一切皆对象!

JavaScript拥有动态类型

var x;  // 此时x是undefined
var x = 1;  // 此时x是数字
var x = "Alex"  // 此时x是字符串 
------------------------
name = 'jason'
name = 123
name = [1,2,3,4]
# name可以指向任意的数据类型 
# 但是有一些语言中,变量名只要指向一种类型,后续不能更改 

3.2.1 数值类型(number)

JavaScript不区分整型和浮点型,就只有一种数字类型。

var a = 11;
var b = 11.11;

typeof a;	// 查看当前数据类型
typeof b;
"number"

特殊的 NaN

// 数值类型 NAN表示的意思是:“不是一个数字”,NOT A NUMBER

类型查询

typeof "abc"  // "string"
typeof null  // "object"
typeof true  // "boolean"
typeof 123 // "number"

​ typeof是一个一元运算符(就像++,--,!,- 等一元运算符),不是一个函数,也不是一个语句。对变量或值调用 typeof 运算符将返回下列值之一:

  • undefined - 如果变量是 Undefined 类型的
  • boolean - 如果变量是 Boolean 类型的
  • number - 如果变量是 Number 类型的
  • string - 如果变量是 String 类型的
  • object - 如果变量是一种引用类型或 Null 类型的

类型转换

parseInt()
parseFloat()
-----------------------------------
parseInt('12312312')
12312312

parseFloat('11.11')
11.11

parseInt('11.11')
11

parseInt('123sdasdajs2312dasd')
123

parseInt('asdasdad123sdasdajs2312dasd')
NaN

3.2.2 字符类型(string)

定义

var s = 'jason'
typeof s
"string"

var s1 = "jason"
typeof s1;
"string"

var s2 = '''egon'''  // 不支持三引号
VM665:1 Uncaught SyntaxError: Unexpected string

模版字符串

var s3 = `
asdkajsd
sdjkladj
asdjlajdkl
`
typeof s3
"string"
----------------------------------------------------------------------
// ES6中引入了模板字符串。模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。模版字符串,除了可以定义多行文本之外,还可以实现格式化字符串操作。如果模板字符串中需要使用反引号,则在其前面要用反斜杠转义。
// 书写${} 会自动去前面找大括号里面的变量名对应的值,如果没有定义直接报错
----------------------------------------------------------------------
var name = 'jason'
var age = 18

var sss = `
   my name is ${name} and my age is ${age}
`

sss
"
   my name is jason and my age is 18
"
----------------------------------------------------------------------
var s4 = `my name is ${namemmmmm}`
VM1140:1 Uncaught ReferenceError: namemmmmm is not defined
    at <anonymous>:1:24

字符串的拼接

// 在python中不推荐你使用+做拼接 join
// 在js中推荐你直接使用+做拼接
name + age

字符类型常用方法

方法 说明
.length 返回长度
.trim() 移除空白
.trimLeft() 移除左边的空白
.trimRight() 移除右边的空白
.charAt(n) 返回第n个字符
.concat(value, ...) 拼接
.indexOf(substring, start) 子序列位置
.substring(from, to) 根据索引获取子序列
.slice(start, end) 切片
.toLowerCase() 小写
.toUpperCase() 大写
.split(delimiter, limit) 分割
常用方法应用 ``` # 记忆的时候一定要对比python去记 ----------------------------------- var name = 'egondsb' name.length 7 ----------------------------------- var name1 = ' egonDSB ' name1 " egonDSB " name1.trim() "egonDSB" name1.trimLeft() "egonDSB " name1.trimRight() " egonDSB" ----------------------------------- var name2 = '$$jason$$' name2.trim('$') # 不能去除括号里指定的内容,没有这个功能 "$$jason$$" ----------------------------------- name2.charAt(0) "$" name2.indexOf('as') 3 ----------------------------------- name2.substring(0, 5) "$$jas" name2.slice(0,5) "$$jas" name2.substring(0,-1) # 不识别负数 ----------------------------------- name2.slice(0,-1) # 后面推荐就使用slice就可以 "$$jason$" ----------------------------------- var name3 = 'eGoNDsb123666HahA' name3.toLowerCase() "egondsb123666haha" ----------------------------------- name3.toUpperCase() "EGONDSB123666HAHA" ----------------------------------- var name = 'tank|hecha|liaomei|mengsao|...' name.split('|') (5) ["tank", "hecha", "liaomei", "mengsao", "..."] ----------------------------------- name.split('|',2) (2) ["tank", "hecha"]0: "tank"1: "hecha"length: 2__proto__: Array(0) ----------------------------------- name.split('|',10) # 第二个参数不是限制切割字符的个数,是获取切割之后元素的个数 (5) ["tank", "hecha", "liaomei", "mengsao", "..."] ----------------------------------- name.concat(name1,name2) "tank|hecha|liaomei|mengsao|... egonDSB $$jason$$" ----------------------------------- var p = 1111 name.concat(p) # js是弱类型(内部会自动转换成相同的数据类型做操作) "tank|hecha|liaomei|mengsao|...1111" ----------------------------------- 在python中拼接: l = [1,2,3,4,5,6,7] res = '|'.join(l) # 直接报错 print(res) ```

3.2.3 布尔值(boolean)

1.在python中布尔值是首字母大写的
	True
	False
	
2.但是在js中布尔值是全小写的
	true
	false
	
# 布尔值是false的有哪些
	空字符串、0、null、undefined、NaN

3.2.4 null与undefined

null
	表示值为空,一般都是指定或者清空一个变量时使用
		name = 'jason'
		name = null

undefined
	表示声明了一个变量,但是没有做初始化操作(没有给值),该变量的默认值是undefined。
	函数没有指定返回值的时候 ,返回的也是undefined

3.2.5 数组(类似于python里面的列表) []

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

JavaScript 提供多个内建对象,比如 String、Date、Array 等等。

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

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

定义:

var l = [11,22,33,44,55]
typeof l
"object"

var a = [123, "ABC"];
console.log(a[1]);  // 输出"ABC"

常用方法:

.length 数组的大小
.push(ele) 尾部追加元素
.pop() 获取尾部的元素
.unshift(ele) 头部插入元素
.shift() 头部移除元素
.slice(start, end) 切片
.reverse() 反转
.join(seq) 将数组元素连接成字符串
.concat(val, ...) 连接数组
.sort() 排序
.forEach() 将数组的每个元素传递给回调函数
.splice() 删除元素,并向数组添加新元素。
.map() 返回一个数组元素调用函数处理后的值的新数组
常用方法
var l1 = [11,'sdasd',11.11,true]
l1[1]
"sdasd"
l1[-1] 	 # 不支持负数索引
-----------------------------------
var l = [111,222,333,444,555,666]
l.length
6
-----------------------------------
l.push(777)
7
l
(7) [111, 222, 333, 444, 555, 666, 777]
-----------------------------------
l.pop()
777
l
(6) [111, 222, 333, 444, 555, 666]
-----------------------------------
l.unshift(123)
7
l
(7) [123, 111, 222, 333, 444, 555, 666]
-----------------------------------
l.shift()
123
-----------------------------------
l.slice(0,3)
(3) [111, 222, 333]
-----------------------------------
l.reverse()
(6) [666, 555, 444, 333, 222, 111]
-----------------------------------
l.join('$')  # 跟python刚好相反
"666$555$444$333$222$111"
-----------------------------------
l.concat([111,222,333])  # extend
(9) [666, 555, 444, 333, 222, 111, 111, 222, 333]
-----------------------------------
l.sort()
(6) [111, 222, 333, 444, 555, 666]

三个比较重要的方法

  1. forEach()
  2. splice()
  3. map()

forEach()

语法:

forEach(function(currentValue, index, arr), thisValue)

参数:

参数 描述
function(currentValue, index, arr) 必需。 数组中每个元素需要调用的函数。 函数参数:参数描述currentValue必需。当前元素index可选。当前元素的索引值。arr可选。当前元素所属的数组对象。
thisValue 可选。传递给函数的值一般用 "this" 值。 如果这个参数为空, "undefined" 会传递给 "this" 值
forEach()
forEach方法
-----------------------------------
var ll = [111,222,333,444,555,666]
ll.forEach(function(value){console.log(value)}, ll)
VM2277:1 111   # 一个参数就是数组里面每一个元素对象
VM2277:1 222
VM2277:1 333
VM2277:1 444
VM2277:1 555
VM2277:1 666
-----------------------------------
ll.forEach(function(value,index){console.log(value,index)}, ll)
VM2346:1 111 0  # 两个参数就是元素 + 元素索引
VM2346:1 222 1
VM2346:1 333 2
VM2346:1 444 3
VM2346:1 555 4
VM2346:1 666 5
-----------------------------------
ll.forEach(function(value,index,arr){console.log(value,index,arr)}, ll)   # 元素 + 元素索引 + 元素的数据来源
VM2430:1 111 0 (6) [111, 222, 333, 444, 555, 666]
VM2430:1 222 1 (6) [111, 222, 333, 444, 555, 666]
VM2430:1 333 2 (6) [111, 222, 333, 444, 555, 666]
VM2430:1 444 3 (6) [111, 222, 333, 444, 555, 666]
VM2430:1 555 4 (6) [111, 222, 333, 444, 555, 666]
VM2430:1 666 5 (6) [111, 222, 333, 444, 555, 666]
-----------------------------------
ll.forEach(function(value,index,arr,xxx){console.log(value,index,arr,xxx)},ll)  # 最多三个
VM2532:1 111 0 (6) [111, 222, 333, 444, 555, 666] undefined
VM2532:1 222 1 (6) [111, 222, 333, 444, 555, 666] undefined
VM2532:1 333 2 (6) [111, 222, 333, 444, 555, 666] undefined
VM2532:1 444 3 (6) [111, 222, 333, 444, 555, 666] undefined
VM2532:1 555 4 (6) [111, 222, 333, 444, 555, 666] undefined
VM2532:1 666 5 (6) [111, 222, 333, 444, 555, 666] undefined

splice()

语法:

splice(index,howmany,item1,.....,itemX)

参数:

参数 描述
index 必需。规定从何处添加/删除元素。 该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
howmany 必需。规定应该删除多少元素。必须是数字,但可以是 "0"。 如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
item1, ..., itemX 可选。要添加到数组的新元素
splice()
splice方法
-----------------------------------
ll  
(6) [111, 222, 333, 444, 555, 666]
-----------------------------------
ll.splice(0,3)  # 两个参数,第一个是起始位置,第二个是删除的个数
(3) [111, 222, 333]

ll
(3) [444, 555, 666]
----------------------------------- 
ll.splice(0,1,777)  # 三个参数,先删除,第一个是起始位置,第二个是删除的个数。后添加第三个
[444]

ll
(3) [777, 555, 666]
----------------------------------- 
ll.splice(0,1,[111,222,333,444])
[777]

ll
(3) [Array(4), 555, 666]

map()

语法:

map(function(currentValue,index,arr), thisValue)

参数:

参数 描述
function(currentValue, index,arr) 必须。函数,数组中的每个元素都会执行这个函数 函数参数: 参数描述currentValue必须。当前元素的值index可选。当期元素的索引值arr可选。当期元素属于的数组对象
thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue ,"this" 的值为 "undefined"
map()
map方法
-----------------------------------
var l1 = [11,22,33,44,55,66]
l1.map(function(value){console.log(value)}, l1)
VM3115:1 11
VM3115:1 22
VM3115:1 33
VM3115:1 44
VM3115:1 55
VM3115:1 66
----------------------------------- 
l1.map(function(value,index){return value*2}, l1)
(6) [22, 44, 66, 88, 110, 132]
----------------------------------- 
l1.map(function(value,index,arr){return value*2}, l1)
(6) [22, 44, 66, 88, 110, 132]

可以使用以下方式遍历数组中的元素:

var a = [10, 20, 30, 40];
for (var i=0;i<a.length;i++) {
  console.log(i);
}

3.2.6 运算符

算术运算符

var x = 10;
var res1 = x++;
var res2 = ++x;
res1 10
res2 12
++表示自增1,类似于 +=1
加号在前先加后赋值 ,加号在后先赋值后加

比较运算符

1 == '1'     # 弱等于,内部自动转换成相同的数据类型比较了
true  

1 === '1'   # 强等于,内部不做类型转换

1 != '1'
false

1 !== '2'
true

逻辑运算符

# python中 and、or、not
# js中 &&、||、!
--------------------------------
5 && '5'
'5'

0 || 1
1

!5 && '5'
false
--------------------------------
一定要注意到底什么时候返回的是布尔值:比较运算时
什么是返回的是数据:逻辑运算时

赋值运算符

=、+=、 -=、 *= ....

3.3 流程控制

在js中代码是没有缩进的,只不过我们处于python书写习惯人为的加上了而已
()条件
{}代码块

if

var age = 28;
if (age>18){
  console.log('来啊 来啊')
}

if-else

if (age>18){
  console.log('来啊 来啊')
}else{
  console.log('没钱 滚蛋')
}

if-else if-else

if (age<18){
  console.log("培养一下")
}else if(age<24){
  console.log('小姐姐你好 我是你的粉丝')
}else{
  console.log('你是个好人')
}

switch 提前列举好可能出现的条件和解决方式

var num = 2;
switch(num){
  case 0:
  	console.log('喝酒');
  	break;  // 不加break 匹配到一个之后 就一直往下执行
  case 1:
  	console.log('唱歌');
  	break;
  case 2:
  	console.log('洗脚');
  	break;
  case 3:
  	console.log('按摩');
  	break;
  case 4:
  	console.log('营养快线');
  	break;
  case 5:
  	console.log('老板慢走 欢迎下次光临');
  	break;
  default:
  	console.log('条件都没有匹配上 默认走的流程')
}

for

// 打印0-9数字
for(let i=0;i<10;i++){
  console.log(i)
}
---------------------------------------
// 循环打印出数组里面的每一个元素
var l1 = [111,222,333,444,555,666]
for(let i=0;i<l1.length;i++){
  console.log(l1[i])
}

while

var i = 0
while(i<100){
  console.log(i)
  i++;
}

三元运算

// python中三元运算符:res = 1 if 1>2 else 3
// 三元运算符不要写的过于复杂 
-----------------------------------
// JS中三元运算:res = 1>2?1:3 
条件成立问号?后面的1,不成立取冒号:后面的3
-----------------------------------
var res = 2>5?8:10 # 10
var res = 2>5?8:(8>5?666:444)  # 666

3.4 函数

3.4.1 基本使用

函数定义

点击查看代码
//JavaScript中的函数和Python中的非常类似,只是定义方式有点区别。
// 在python定义函数需要用到关键字def
// 在js中定义函数需要用到关键字function
-----------------------------------
// 格式
function 函数名(形参1,形参2,形参3...){函数体代码}
func1()  // 调用,加括调用,跟python是一样的
----------------------------------------------------------------------
// 普通函数定义
function f1() {
  console.log("Hello world!");
}
----------------------------------------------------------------------
// 带参数的函数
function f2(a, b) {
  console.log(arguments);  // 内置的arguments对象
  console.log(arguments.length);
  console.log(a, b);
}

function func2(a,b){
  console.log(a,b)
}
func2(1,2)

func2(1,2,3,4,5,6,7,8,9)  # 多了没关系,只要对应的数据
VM3610:2 1 2
undefined

func2(1)  # 少了也没关系
VM3610:2 1 undefined
----------------------------------------------------------------------
// 带返回值的函数
function sum(a, b){
  return a + b;
}
sum(1, 2);  // 调用函数
----------------------------------------------------------------------
// 匿名函数方式
var sum = function(a, b){
  return a + b;
}
sum(1, 2);
----------------------------------------------------------------------
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
(function(a, b){
  return a + b;
})(1, 2);

函数中的arguments参数

点击查看代码
function add(a,b){
  console.log(a+b);
  console.log(arguments.length);
  console.log(arguments[0]); //arguments相当于传入的参数全部包含,这里取得就是第一个元素1
}

add(1,2)

function func2(a,b){
  console.log(arguments)  // 能够获取到函数接受到的所有的参数
  console.log(a,b)
}
-----------------------------------
function func2(a,b){
  if(arguments.length<2){
    console.log('传少了')
  }else if (arguments.length>2){
    console.log('传多了')
  }else{
    console.log('正常执行')
  }
}

函数的返回值,使用的也是关键字return

点击查看代码
function index(){
  return 666
}
-----------------------------------
function index(){
  return 666,777,888,999
}
res = index();
999

res
999  // 只能拿到最后一个
-----------------------------------
function index(){
  return [666,777,888,999]
}
// js不支持解压赋值,函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回。

匿名函数,就是没有名字

点击查看代码
function(){
  console.log('哈哈哈')
}

var res = function(){
  console.log('哈哈哈')
}

箭头函数

点击查看代码
// ES6中允许使用“箭头”(=>)定义函数。主要用来处理简单的业务逻辑, 类似于python中的匿名函数
var func1 = v => v;   //箭头左边的是形参,右边的是返回值"
//等价于
var func1 = function(v){
  return v
}

// 如果箭头函数不需要参数或需要多个参数,就是用圆括号代表参数部分:
var func2 = (arg1,arg2) => arg1+arg2
//等价于
var func1 = function(arg1,arg2){
  return arg1+arg2
}

var f = () => 5;
// 等同于
var f = function(){return 5};

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2){
  return num1 + num2;  //这里的return只能返回一个值,如果想返回多个值需要自己手动给他们包一个数组或对象中
}

3.4.2 函数的全局变量与局部变量

局部变量

在JavaScript函数内部声明的变量是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

全局变量:

在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

变量生存周期:

JavaScript变量的生命期从它们被声明的时间开始。

局部变量会在函数运行以后被删除。

全局变量会在页面关闭后被删除。

作用域:

首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。与python作用域关系查找一模一样!

示例
var city = "BeiJing";

function f() {
  var city = "ShangHai";
  function inner(){
        var city = "ShenZhen";
        console.log(city);
  }
  inner();
}

f();  //输出结果是?  ShenZhen
-----------------------------------

var city = "BeiJing";
function Bar() {
      console.log(city);
}

function f() {
      var city = "ShangHai";
      return Bar;
}
var ret = f();
ret();  // 打印结果是:BeiJing
-----------------------------------

var city = "BeiJing";

function f(){
    var city = "ShangHai";
    function inner(){
        console.log(city);
    }
    return inner;
}
var ret = f();
ret();   // ShangHai

3.5 对象

​ JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等。在JavaScript中,对象是拥有属性和方法的数据。img

3.5.1 自定义对象

avaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键。

你可以看成是我们python中的字典,但是js中的自定义对象要比python里面的字典操作起来更加的方便

创建自定义对象 {}

// 第一种创建自定义对象的方式
var d1 = {'name':'jason','age':18}
-----------------------------------
var d = {'name':'jason','age':18}
typeof d
"object"
-----------------------------------
d['name']
"jason"
-----------------------------------
d.name  // 比python从字典获取值更加的方便
"jason"
-----------------------------------
d.age
18
// 第二种创建自定义对象的方式,需要使用关键字 new"
var d2 = new Object() //  {}
-----------------------------------
d2.name = 'jason'
{name: "jason"}
-----------------------------------
d2['age'] = 18
{name: "jason", age: 18}

遍历对象中的内容:

// 支持for循环,暴露给外界可以直接获取的也是键
for(let i in d){
  console.log(i,d[i])
} 

3.5.2 Date对象

创建Date对象

点击查看代码
//方法1:不指定参数
var d1 = new Date();
console.log(d1.toLocaleString());
//方法2:参数为日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");
console.log(d3.toLocaleString());
//方法3:参数为毫秒数
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());

//方法4:参数为年月日小时分钟秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString());  //毫秒并不直接显示
-----------------------------------
let d3 = new Date()
Fri May 15 2020 14:41:06 GMT+0800 (中国标准时间)
-----------------------------------
d3.toLocaleString()
"2020/5/15 下午2:41:06"
-----------------------------------
//  也支持自己手动输入时间
let d4 = new Date('2200/11/11 11:11:11')
d4.toLocaleString()
-----------------------------------
let d5 = new Date(1111,11,11,11,11,11)
d5.toLocaleString()  # 月份从0开始0-11月
"1111/12/11 上午11:11:11"

时间对象具体方法

let d6 = new Date();
d6.getDate()  	       获取日
d6.getDay()		    获取星期
d6.getMonth()	    获取月份(0-11)
d6.getFullYear()	获取完整的年份
d6.getHours()		获取小时
d6.getMinutes()		获取分钟
d6.getSeconds()		获取秒
d6.getMilliseconds()  获取毫秒
d6.getTime()	       时间戳

3.5.3 JSON对象

在python中序列化反序列化
	dumps 		       序列化
	loads			反序列化

在js中也有序列化反序列化
	JSON.stringify()	dumps
	JSON.parse()	    loads
let d7 = {'name':'jason','age':18}

let res666 = JSON.stringify(d7)
"{"name":"jason","age":18}"

JSON.parse(res666)
{name: "jason", age: 18}

3.5.4 RegExp对象

在python中如果需要使用正则,需要借助于re模块。在js中需要你创建正则对象

// 第一种 有点麻烦
let reg1 = new RegExp('^[a-zA-Z][a-zA-Z0-9]{5,11}') 

// 第二种 个人推荐
let reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/

// 匹配内容。

reg1.test('egondsb')
reg2.test('egondsb')
test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。
语法
	regexObj.test(str)
参数
	str:用来与正则表达式匹配的字符串
返回值
	如果正则表达式与指定的字符串匹配 ,返回true;否则false。

练习

点击查看代码
// 获取字符串里面所有的字母s
let sss = 'egondsb dsb dsb'
sss.match(/s/)  // 拿到一个就停止了
sss.match(/s/g)	// 全局匹配,g就表示全局模式
-----------------------------------
sss.match(/s/)
["s", index: 5, input: "egondsb dsb dsb", groups: undefined]
sss.match(/s/g)
(3) ["s", "s", "s"]
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

// 全局匹配模式注意点
// 注意点一
let reg3 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/g
reg2.test('egondsb')
-----------------------------------
reg3.test('egondsb')  //  全局模式有一个lastIndex属性
true
reg3.test('egondsb')
false
reg3.test('egondsb')
true
reg3.test('egondsb')
false

reg3.lastIndex
0
reg3.test('egondsb')
true
reg3.lastIndex
7
-----------------------------------
// 注意点二 
let reg4 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/

reg4.test()  // 什么都不传,默认传的是undefined
true
-----------------------------------
reg4.test(undefined)
true
-----------------------------------
let reg5 = /undefined/
reg5.test('jason')
false
reg5.test()
true
-----------------------------------
//总结:你在用js书写正则的时候一定要注意上述问题

3.5.5 Math对象

abs(x)      返回数的绝对值。
exp(x)      返回 e 的指数。
floor(x)    对数进行下舍入。
log(x)      返回数的自然对数(底为e)。
max(x,y)    返回 x 和 y 中的最高值。
min(x,y)    返回 x 和 y 中的最低值。
pow(x,y)    返回 x 的 y 次幂。
random()    返回 0 ~ 1 之间的随机数。
round(x)    把数四舍五入为最接近的整数。
sin(x)      返回数的正弦。
sqrt(x)     返回数的平方根。
tan(x)      返回角的正切。

4 三剑客小结

[三剑客小结](day 54 三剑客小结 - maju - 博客园 (cnblogs.com))

posted @ 2021-12-08 10:53  maju  阅读(71)  评论(0)    收藏  举报