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 变量声明
- JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
- 声明变量使用: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]
三个比较重要的方法
- forEach()
- splice()
- 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中,对象是拥有属性和方法的数据。
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) 返回角的正切。

浙公网安备 33010602011771号