0020 认识js之 ECMA语法
目录
前提
Javascripts 是前端的核心中的核心,前端的组件操作几乎都是由Js来完成的,作为分布式全栈开发工程师,不懂js就就是像海盗不会游泳一样。
Javascripts 语言
js是一种贴合java语法的解释性脚本语言,解释器就是游览器,完整的js包含 ecma制定了js标准语法,bom,dom三大类。
js的引入方式
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 打印数据类型的函数
2、数据类型 - 字符串 string
1.字符串的使用 定义字符串 var str = '123',
字符串的常用方法:使用字符串的属性,字符串的长度,大小写转换,切片,索引,过滤等相关的属性或者功能,只是语法表现不同。
1)计算文本长度 length
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)

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

// 指定一个具体的时间

时间戳 1970年+ 秒数

// 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的代码执行前扫描语法,定义全局和局部空间,定义声明函数和变量名称,执行时,变量数据更改数据的内存地址,函数体执行。
浙公网安备 33010602011771号