JS学习
JS简介
1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。
该标准一开始就是针对JavaScript语言制定的,但是没有称其为JavaScript,有两个方面的原因。一是商标,JavaScript本身已被Netscape注册为商标。而是想体现这门语言的制定者是ECMA,而不是Netscape,这样有利于保证这门语言的开发性和中立性。
因此ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现。
ECMAScript的历史
年份 | 名称 | 描述 |
---|---|---|
1997 | ECMAScript 1 | 第一个版本 |
1998 | ECMAScript 2 | 版本变更 |
1999 | ECMAScript 3 | 添加正则表达式添加try/catch |
ECMAScript 4 | 没有发布 | |
2009 | ECMAScript 5 | 添加"strict mode"严格模式添加JSON支持 |
2011 | ECMAScript 5.1 | 版本变更 |
2015 | ECMAScript 6 | 添加类和模块 |
2016 | ECMAScript 7 | 增加指数运算符(**)增加Array.prototype.include |
JS基础
1.注释语法
//单行注释
/*多行注释*/
2.引入js的多种方式
1.head内script标签内填写
2.head内script标签src属性进入外部js资源
3.body内最底部通过ecpript标签src属性引入外部js资源(最常用)
ps:页面的加载顺序是从上往下的,所以操作标签js代码一定要等待标签加载完毕再执行才可以正常运行,否则容易报错
3.结束符号
分好
常量与变量
"""
1.pycharm创建js文件或者html文件(适合编写较为复杂的js代码)
2.浏览器提供编写js代码的环境
"""
在js中生命变量需要使用关键字
var
var name = 'jason';
let
let name = 'jason';
ps:let是ECMA6新语法,可以在局部定义变量不影响全局
在js中生命常量也需要使用关键字
const
const pi=3.14;
基本数据类型
1.数值类型(Number)
"""
在JS中查看数据类型的方式typeof
"""
在JS中整型与浮点型不分家,都叫Number
NaN也属于数值类型,意思:不是一个数字(Not A Nnmber)
2.字符类型(String)
单引号 'jason'
双引号 "jason"
模板字符串 `jason`
let name1 = 'jason'
let age1 = 18
undefined
let desc = `my name is ${name1} my age is ${age1}`
ps:字符串拼接推荐使用加号
常用方法:
方法 | 说明 |
---|---|
.length | 返回长度 |
.trim() | 移除空白 |
.trimLeft() | 移除左边的空白 |
.trimRight() | 移除右边的空白 |
.charAt(n) | 返回第n个字符(索引取值) |
.concat(value, ...) | 拼接 |
.indexOf(substring, start) | 子序列位置 |
.substring(from, to) | 根据索引获取子序列 |
.slice(start, end) | 切片 |
.toLowerCase() | 小写 |
.toUpperCase() | 大写 |
.split(delimiter, limit) | 分割 |
3.布尔类型
JS里面的布尔值与Python不同
JS是纯小写,而Python是首字母大写
4.null与undefined
null表示值为空(曾经拥有过) undefined表示没有定义(从来没有过)
5.对象
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。
JavaScript 提供多个内建对象,比如 String、Date、Array 等等。
对象只是带有属性和方法的特殊数据类型
对象之数组(Array)>>>:类似于python中的列表
let l1 = []
对象之自定义对象(object)>>>:类似于python中的字典
let d1 = {'name':'jason','pwd':123}
let d2 = new object();
常用方法:
方法 | 说明 |
---|---|
.length | 数组的大小 |
.push(ele) | 尾部追加元素 |
.pop() | 获取尾部的元素 |
.unshift(ele) | 头部插入元素 |
.shift() | 头部移除元素 |
.slice(start, end) | 切片 |
.reverse() | 反转 |
.join(seq) | 将数组元素连接成字符串 |
.concat(val, ...) | 连接数组 |
.sort() | 排序 |
.forEach() | 将数组的每个元素传递给回调函数 |
.splice() | 删除元素,并向数组添加新元素。 |
.map() | 返回一个数组元素调用函数处理后的值的新数组 |
关于sort()需要注意:
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
function sortNumber(a,b){
return a - b
}
var arr1 = [11, 100, 22, 55, 33, 44]
arr1.sort(sortNumber)
sort
6.运算符
1.算术运算符
+ - * / ++(自增1) --(自减1)
2.比较运算符
> >= < <= != == === !==
1.!=(值不等 弱) ==(值相等 弱) ===(值相等 强) !==(值不等 强)
ps:js在做弱等判断的时候会直接将数据类型转换统一,强等的时候不会有此操作
3.逻辑运算符
&&(与) ||(或) !(非)
7.流程控制
1.单if分支
if(条件){
条件成立执行的代码
}
2.if...else分支
if(条件){
条件成立成立执行的代码
}else{
条件不成立执行的代码
}
3.if...eles if ...else分支
if(条件1){条件1成立执行的代码}
else if(条件2){条件1不成立条件2成立执行的代码}
else{条件1和条件2都不成立执行的代码}
4.如果分支结构中else if很多还可以考虑使用switch
switch(条件){
case 条件1:
条件1成立执行的代码;
break # 如果没有break会基于某个case一致执行下去
case 条件2:
条件2成立执行的代码;
break
case 条件3:
条件3成立执行的代码
break
case 条件4:
条件4成立执行的代码;
break;
default:
条件都不满足执行的代码
}
for循环
for(起始条件;循环条件;条件处理){ # 这里中间的符号一定是分号
循环体代码
}
for(let i=0;i<10;i++){
console.log(i)
}
let dd = {'name':'jason','age':18}
for(let k in dd){
console.log(k)
}
while循环
while(循环条件){循环体代码}
"""
三元运算:
python中:值1 if 条件 else 值2
JS中: 条件?值1:值2
"""
8.函数
"""
python中函数的定义
def 函数名(形参):
'''函数注释'''
函数体代码
return 返回值
"""
JS函数:
function 函数名(形参){
//函数注释
函数体代码
return 返回值
}
匿名函数
var s1 = function(a,b){
return a+b;
}
箭头函数
var f=v => v;
相当于:
var f = function(v){
return v
}
var sum = (num1, num2) => num1 + num2;
相当于:
var sum = function(num1, num2){
return num1 + num2;
}
1.JS中函数的形参与实参个数可以不对应
串烧了就是undefined 传多了不适用
2.函数体代码中有一个关键字arguments用来接收所有的实参
3.函数的返回值如果有多个需要自己处理成一个整体(如果要返回多个值,只能将其放在数组或对象中返回)
9.内置对象
var d = new Date()
getDate() 获取日
getDay() 获取星期
getMonth() 获取月(0-11)
getFulllYear() 获取完成年份
getYear() 获取年
getHours() 获取小时
getMinutes() 获取分钟
getSeconds() 获取秒
getMilliseconds 获取毫秒
getTime() 获取累计毫秒数(从1970/1/1午夜)
toLocaleString() 根据区域时将date转为字符串(获取现在的时间)
let dd = {name:'jason',age:18}
JSON.stringify(dd) 序列化
JSON.parse(ss) 反序列化
定义正则两种方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;
1.全局模式的规律
lastIndex
2.test匹配数据不传默认传undefined