10、js相关

1、js基础
js简介
    js也是一门编程语言(内部的逻辑有很多的bug,不是很严谨)
    js的发展史  javascript ecmascipt
    主要的版本
    5.1、6
js的注释
    //单行注释
    /**/多行注释
js的引入方式
    script内部书写
    script src属性引入外部js文件
js是用分号作为结束的语句,不写也没问题

js变量
    在js中首次声明变量需要使用关键字
    var
        声明的都是全局变量
    let
        可以区分全部和局部
    for循环案例
不用关键字其实也不报错(js不严谨是一种解释型弱类型的动态语言)

js常量
在js中是有真正意义上的常量
    const pi =3.14  定义后不能修改
    pi=4 报错

2、变量
js变量的命名规范
    1、变量名只能是
        数字、字母、下划线$
    2、变量名命名规范(不遵循可以)
        1、js中推荐使用驼峰体命名
            userName
            dataOfDb
        2、python推荐使用下划线方式
            user_name
            data_of_db
        3、不能用关键字做变量名
3、js代码书写位置 ``` 1、可以单独开设js文件书写 2、还可以直接在浏览器提供的console界面书写 在用浏览器书写js的时候 左上方清空按钮只是清空当前页面 代码其实还在 如果想要重新来 最好开设一个 界面 (在使用浏览器书写 自己的js代码推荐在 自己的html页面打开 ```
4、数据类型(number)
var a = 11;
var b = 11.11;
//如何查看当前数据类型
typeof a;

var a = 11;
var b = 11.11;
typeof a;
typeof b;
'number'
//特殊的NaN:数值类型 表示的意思是‘不是一个数字’ NOT A NUMBER'
//类型转换
parseInt()
parseFloat()

parseInt('123123123')
123123123
parseFloat('11.1')
11.1
parseInt('11.1')
11
parseInt('123asfas123af123')
123
parseInt('asdsa1231fv')
NaN
5、字符类型(string)
var s = 'jason'
undefined
typeof s
'string'
var s2 = '''egon'''//不支持双引号
//模板字符串

var s3 = `
asdkajsd
asdasdd
asfasf
`
typeof s3
'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 ${naemmmmmm}'  报错

//在写js代码的时候不要去管左侧箭头的内容

//字符串的拼接
//在python中不推荐使用 + 做拼接 join
//在js中推荐直接使用+做拼接
6、字符类型常用方法
.length  返回长度
.trim() 移除空白 // 不能去除指定内容
.trimLeft() 移除左边空白
.trimRight() 移除右边空白
.charAt(n) 返回第n个拼接字符
.concat(value,...) 拼接   js 是弱类型 内部会自动转换成相同的数据类型做操作
    联想记忆
    MySql
        concat
        concat_ws
        group_concat
.indexOf(substring,start) 子序列位置
.substring(from,to)  根据索引获取子序列   不识别负数
.slice(start,end)  切片  推荐使用slice
.toLowerCase() 小写
.toUpperCase() 大写
.split(delimiter,limit) 分割  第二个参数不是限制切割字符的个数 是获取切割之后元素的个数

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

null和undefined
null
    表示值为空 一般都是指定或者清空一个变量时使用
        name = 'jason'
        name = 'null'
undefined
    表示声明一个变量 但是没有做初始化的操作

8、对象
一切皆对象
数组(类似于python里面的列表) []
var l = [11,22,33,44,55]
typeof l
'object'
var ll = [11,'aa',11.1,true]
ll[1]
'aa'
ll[-1]   不支持复数索引


自定义对象(类似python里面的字典){}
扩展python常用的内置方法 map、zip、filter、reduce
map映射
l = [1,2,3,4,5]
res = map(lambda x:x**2,l)
print(list(res))
[1,4,9,16,25]
zip拉链
l1 = [111,222,333,444]
l2 = ['赚钱','努力','奋斗']
res = zip(l1,l2)
print(list(res))
[(111,'赚钱'),(222,'努力'),(333,'奋斗')]
filter 过滤
l = [1,2,3,4,5,6]
res = filter(lamdba x:x>3,l)
print(list(res))
[4,5,6]
reduce 累加器
form functools import reduce
l = [1,2,3,4,5,6]
res = reduce(lambda x,y:x*y,l)
print(res)
720

9、运算符
# 算术运算符
var x=10;
var res1 = x++
var res2 = ++x
res1 = 10
res2 = 12
++表示自增1 类似于+=1
加号在前 先加后赋值  加号在后先赋值后加

#比较运算符
1 == '1'  # 弱等于 内部自动转换成相数据类型做比较了
1 ==='1'  # 强等于 内部不做类型转换
1 != 1  false
1 !=='2'  true

# 逻辑运算符
    python中 and or not
    js 中   $$ || !
 5 && '5'     '5'
 0 || 1        1
 !5 && '5'   5
 一定要注意什么时候返回布尔值 比较的时候  什么时候返回数据  逻辑运算

 # 赋值运算符
 = += -= *= ....
10、流程控制
if 判断
 var age = 10;
 #if(条件){条件成立之后指向的代码块}
 if (age>18){
    console.log('努力赚钱')
 }
 # if-else
  if (age>18){
    console.log('努力赚钱')
 }else{
    console.log('必须努力啊')
 }
 #if-else
   if (age>18){
    console.log('努力赚钱')
 }else if(age<24){
    console.log('好好学习赚钱')
 }else{
    console.log('必须努力啊')
 }
 在js中 代码是没有缩进的

 switch语法
 提前列举好可能出现的情况

 for 循环
 打印0-9数字
 for(let i=0;i<10;i++){
    console.log(i)
 }
 #题目 循环打印出数组里面每一个元素
 var l1 = [11,22,33,44,55]
 dor(et 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
 条件成立取问号后面的值 不成立取冒号后面的值
 var res =2>5?8:10  #10
 三元运算符不要写的太复杂

11、函数
 在python定义函数需要用到关键字def
 在js中定义函数需要用到关键字function

 #格式
 function  函数名(形参1,形参2...){函数体代码}
 #无参函数
 function func1(){
    console.log('hello world')
 }
 func1() #调用 加括号调用 跟python是一样的

 #有参函数
 function func2(a,b) {
    console.log(a,b)
 }
 func2(1,2)

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

 func2(1)  # 少了也没关系
 VM3601 :2 1 undefined

 #关键字argyments
 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,777,888
 }
 res = index();
 999
 res
 999  # 只能拿到最后一个

 function index(){
    return[1,2,3,4]
 }
 #js不支持解压赋值

 匿名函数  就是没有名字
 function(){
    console.log('努力')
 }
 var res = function(){
    console.log('赚钱')
 }
 # 箭头函数(要了解一下) 主要用于处理简单的业务逻辑 类似于python中的匿名函数
 var func1 = v =>v; '''箭头左边的是形参 右边的是返回值'''
 等价于
 var func1 = function(v){
    return v
 }
12、函数的全局变量和局部变量
# 跟python查找变量的顺序一致
var city = "BeiJing";
function f() {
  var city = "ShangHai";
  function inner(){
    var city = "ShenZhen";
    console.log(city);
  }
  inner();
}

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

var city = "BeiJing";
function Bar() {
  console.log(city);
}
function f() {
  var city = "ShangHai";
  return Bar;
}
var ret = f();
ret();  // 打印结果是?


var city = "BeiJing";
function f(){
    var city = "ShangHai";
    function inner(){
        console.log(city);
    }
    return inner;
}
var ret = f();
ret();
13、自定义对象
第一种创建自定义对象的方式
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
for 循环取值
for(let i in d){
	console.log(i,d[i])
}  # 支持for循环 暴露给外界直接获取的也是键

'''第二种创建自定义对象的方式 需要用到关键字new
var d2 = new 0bject()
d2.name = 'jason'
{name:'jason'}
d2['age'] = 18
{name:'jason',age:18}
14、Date对象
let d3 = new Date()
Tue Mar 09 2021 17:31:15 GMT+0800 (中国标准时间)


d3.toLocaleString()
2021/3/9下午5:31:15"
# 也支持自己手动输入时间
let d4 = new Date('2022/12/11 13:14:15')
d4.toLocaleString()  
"2022/12/11下午1:14:15"
let d5 = new Date(2021,12,13,14,13,14)
d5.toLocaleString()  月份从0-11月
"2022/1/13下午2:13:14     

时间对象的具体方法
15、json对象
在python中序列化反序列化
dumps   序列化
loads  反序列化
在js中也有序列化和反序列化
JSON.stringify()    dumps
JSON.parse()        loads

let d7 = {'name':'jason','age':18}
let res666 = JSON.stringify(d7)
res666
"{"name":"jason","age":18}"
JSON.parse(res666)
{name: "jason", age: 18}
16、RegExp对象
在python中如果使用正则 需要借助re模块
在js中需要创建正则对象

第一种 有点麻烦
let reg1 = new RegExp('^[a-zA-Z0-9]{5,11}')
第二种、个人推荐
let reg2 = /^[a-zA-z][a-zA-Z0-9]{5,11}/
匹配内容
reg1.test('egondsb')
reg2.test('egondsb')
# 题目  获取字符串里面所有字母s
let sss = 'egondsb dsb dsb'
sss.match(/s/)  #拿到一个就停止
sss.match(/s/g) # 全局匹配  g表示全局模式、、

全局模式吐槽点
原文地址:https://www.cnblogs.com/liuyang521/p/14507498.html