0020 认识js之 ECMA语法

前提

Javascripts 是前端的核心中的核心,前端的组件操作几乎都是由Js来完成的,作为分布式全栈开发工程师,不懂js就就是像海盗不会游泳一样。

Javascripts 语言

js是一种贴合java语法的解释性脚本语言,解释器就是游览器,完整的js包含 ecma制定了js标准语法,bom,dom三大类。
js的引入方式
image-20230309220036875

1、js 规范和变量

1.   js 代码的代码没有强制缩进的机制,但是是以分号;代表代码的换行。
2.   变量赋值的规则是
    先声明 后定义 声明并赋值 var y = 20;
    一行代码声明多个变量   
3、  在js中不使用var 声明变量名,那么这个变量一定是一个全局变量,
4、  如果 在函数内变量和全局变量之间使用var 进行区分,var 变量名相当于定义局部 变量名
5、  变量名命名规范和python几乎一致 ,除了html 和 SQL语句 几乎都要区分大小写
6、  单行注释 和多行 注释  
     //
     
     /*
     *
     */
 


4.强类型语言,数据的类型必须强制转换才可以,                    python是强类型解释性语言,
  弱类型语言根据不同调用方式和赋值的不同,数据类型自动转换。    js是弱类型解释性语言和shell语言类似。


<script>
    // 变量赋值
    var s ;
    s = '3.14' ;

    var ele = 'hell0 JS';

    var a = 1, b = 2 ;
    
//    在函数内变量和全局变量之间使用var 进行区分
    console.log(ele,a,b)

</script>

2、数据类型 数字 number

1.对于不同的编程语言 基本数据类型,都有相同的对象功能和属性,js的基本数据类型,也是不可变类型,


2. 数字类型不分浮点型和整形,统称数字类型
6、方法:  typeof 打印数据类型的函数
image-20230309221528250

2、数据类型 - 字符串 string

1.字符串的使用  定义字符串 var str = '123',
字符串的常用方法:使用字符串的属性,字符串的长度,大小写转换,切片,索引,过滤等相关的属性或者功能,只是语法表现不同。

1)计算文本长度 length

image-20230309222244049

3、数据类型的转换

4、js的布尔类型的 false和true 真等于1 和假等于1 的定义。        


5、undefined空值
     当声明一个变量没有赋值时,该变量值为undefined,
     当函数执行后没有return返回值,那么函数的返回值等于undefined。
     null值 代表一个空对象,
     



1.js中的数据类型转换
parseInt,转换整型数字 
parsefloat转换成浮点型数字
纯数字形式的字符串 parseint('123')

当字符串的以数字开头,只转换连续的数字 parseint("123瓶") 转换结果123
字符串有小数的值转换第一个小数点后的连续数字,pasefloat('99.88.77')转换结果是99.88

2.数字转字符串,布尔转字符串,列表转字符串,使用内置方法 str.toString()变量的类型转成字符串。

3. 布尔类型的转换,每个数据类型中都有一个零值,字符串中是""空值,数字类型中是0,对象的零值是null
除了每个数据类型中的零值外,其他的数据都是True。Boolean函数判断的依据,但是js中数组和josn皆为Ture

4.js在数据类型存在暗转换的功能,不同的数据类型可以进行相加相减,当数字+字符串 ,字符串优先,数字转换成字符串,进行字符串的拼接。

当数字减法字符串时,数字优先,字符串转换成数字,在做减法。



1.原始值和引用值,在python中变量值指的是一个内存地址,不同的变量名被赋值相同的值时,指向同一个内存地址
,在js中分为堆和栈,存放不同状态的变量值。


2.js中的运算符,与或非 && || !==进行数值的比较,===三个等号数值的类型不要暗转换比较,其他运算符均和python相差无几



3、分支语句if  else,switch case ,后者的代码简洁,效率更高, 能够兼容if else。

4、循环语句

1、js的循环语句  for循环的语句内 初始化值,表达式,步进语句在一个小括号内,while循环和python一致,缩进替换成{}

2、数组的声明 和变量的声明一致,使用 实例化对象加参数,另一个 就是 new 数据类型 赋值给对象名

3、push添加元素到数组的默认在末尾,js的数组支持多数据类型,嵌套数组 pop添加数组元素,默认删除最后一个,pop的方法的返回值等于删除的数据

4、数组的unshift 在数组头部添加, shift删除第一个元素unshift的方法的返回值等于删除的数据

5、js的数组合python的列表在功能中元素的删除添加,翻转reverse 排序sort,合并,拼接,切片等等方法 用法一致

5、object对象

/// object对象是对象,不是形式字典的含义,键是属性,value是属性值。通过对象的.属性获取属性值。以形式字典的方式获取属性的 func['name']

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>演示截图</title>

</head>
<body>
<script>

// object数据类型 创建object
 var ele  = new Object();
 ele.name='name';
 ele.age = 18;


var ele1 = {
     name: "a",
    age: 18
}
 console.log(ele.name,typeof ele,ele1.age,typeof ele1)

</script>
</body>
</html>






2. 循环语句分为 条件循环和遍历循环,
条件循环是索引循环,
遍历循环是可迭代对象取值,python可迭代对象循环取值,js中也可以实现可迭代对象循环取值,
var i in person{} i 相当于key ,通过person[i] 取值value

3、js中json数据类型 ,语法和python的语法类似,JSON.parse反序列化json数据,JSON.stringify
序列化js数据,和后端服务进行数据交互使用。

6 . Date 对象

1、Date对象,实例化对象,打印对象本身也是时间形式的展示,一般使用tolocalestring方法获取格式化时间,
2、对象传参时间字符串获取时间片节点信息。一般使用无参数实例化,使用对象的方法获取 时间片
3、使用方法tolocalestring ,获取本地时间,toUTCstring获取0时区时间。
4、math对象针对于数字类型的,或者叫浮点型对象,针对浮点数据类型,取绝对值,取小数的位数名,
向上取值和向下取值,生成随机数,次方运算等。
// 1、Date对象,实例化对象,打印对象本身也是时间形式的展示,

    var date = new Date()
    console.log(date)

image-20230312201831289

// 一般使用tolocalestring方法获取格式化时间,

image-20230312202321832

// 指定一个具体的时间

image-20230312202614514

时间戳  1970年+ 秒数

image-20230312203514326

// 3、使用方法tolocalestring ,获取本地时间,
console.log(date_obj.toLocaleString())


// toUTCstring获取0时区时间。
console.log(date_obj.toUTCString())


7 、全局域的含义

1、js的函数体执行代码之前,先扫描语法的过程中,把声明函数和变量进行开辟内存空间存储,
  相当于在全局变量空间内做了空间标记,在代码执行的时候,就不需要考虑执行代码和声明代码之间的位置关系。
2、 js 弱类型的解释器语言,形参的数据类型不需要声明,存在暗转换的情况。
3、在js中实参和形参的数量不对等不报错,只执行函数接收的参数, 关键字参数中默认参数和python一致,参数的使用不严格。
4、 python *args用于函数接收不定长参数,js 函数在内部使用 arguments接收不定长参数,使用场景一般是对参数内容做判断,对参数的数量做判断

1.js的匿名函数的三种玩法 不需要返回值的 ,包裹匿名函数的代码块加括号执行,参数正常该传就传,
需要返回值的,匿名函数赋值给变变量名,变量名加()执行函数获取匿名函数的返回值,匿名函数的装饰器,
return 匿名函数,相当于装饰匿名函数。 在js中 匿名函数声明代码在调用之前,因为预编译代码时要为匿名函数创建内存空间。
2,函数的返回值  在js中 只能返回一个值或者说是一个数据类型,python中可以返回多个值,是因为解释器处理成了元组,js中需要自己处理成一个值,

3 js的预编译规则扫描基础语法,先从全局中声名变量和函数,预编译 时 变量赋值undefined 函数名 赋值给函数体
全局代码执行变量赋值,匿名函数赋值,函数体,代码执行局部函数时,查找声明代码 局部函数赋值undefined,函数赋值函数体,
总结:js的代码执行前扫描语法,定义全局和局部空间,定义声明函数和变量名称,执行时,变量数据更改数据的内存地址,函数体执行。
posted @ 2023-03-10 18:57  mmszxc  阅读(95)  评论(0)    收藏  举报