JS简介
全称JavaScript但是与Java一毛钱关系都没有 之所以这么叫是为了蹭Java的热度
它是一门前端工程师的编程语言 但是它本身有很多逻辑错误(不是很严谨)
IT行业鄙视链: 后端 > 前端、运维、测试、产品、老板
前端想一统天下:node.js
JS发展史>>>:JavaScript很容易学习
JS基础
1.注释语法
// 单行注释
/*多行注释*/
2.引入js的多种方式
1.head内script标签内编写
2.head内script标签src属性引入外部js资源
(* 1.2方式容易导致未页面未全部加载完成就使用js,很容易发生报错)
3.body内最底部通过script标签src属性引入外部js资源(最常用)
ps:注意页面的下载是从上往下的 所以操作标签js代码一定要等待标签加载完毕再执行才可以正常运行
3.结束符号
分号(很多时候不写也没问题)
变量与常量
"""
1.pycharm创建js文件或者html文件(适合编写较为复杂的js代码)
2.浏览器提供编写js代码的环境(右键选择检查,console)
"""

console.log()
相当于是python中的print 打印
在js中声明变量需要使用关键字
换行 shift+回车
赋值需要声明,也可以只声明不赋值,用的时候在赋值,修改的时候也不用在声名
var
var name = 'jason'; 全局变量
let
let name = 'tony'; 局部变量
ps:let是ECMA6新语法 可以在局部定义变量不影响全局
在js中声明常量也需要使用关键字
const
const pi = 3.14; 不能更改
基本数据类型
"""
在JS中查看数据类型的方式 typeof
typeof s3 直接加变量名就好,不用加括号
"""
1.数值类型(Number)
parseInt(123.23)
123 转整型
parseFloat(123)
123 转浮点型,但是不会自动添加小数位
parseFloat(123.23)
123.23 有小数位会自动保留
parseInt('jason')
NaN 不是数值类型会显示NaN
在JS中整型与浮点型不分家 都叫Number
NaN也属于数值类型 意思是:不是一个数字(Not A Number)
2.字符类型(String)
定义字符类型有三种方式
1.单引号 'jason'
2.双引号 "jason"
3.模板字符串 `jason` 可以放多行文本,支持格式化输出
let name1 = 'jason'
let age1 = 18
let desc = `my name is ${name1} my age is ${age1}`
desc
'my name is &{name} my age is &{age}'
1.字符串拼接推荐使用加号(除了python不推荐,其它语言都推荐)
'hello' + 'kevin'
'hellokevin'
2.常见内置方法
| JavaScript |
说明 |
python对应 |
| .lenght |
返回长度 |
len() |
| .trim() |
移除空白 |
.strip() |
| .trimLeft() |
移除左边的空白 |
.lstrip() |
| .trimRight() |
移除右边的空白 |
.rstrip() |
| .charAt(n) |
返回第n个字符 |
索引取值[] |
| .index('j',j的索引位数) |
子序列位置 |
无 |
| .concat(value,value) |
拼接 |
.join(字符串,字符串) |
| .slice(start,end) |
切片 |
字符串[起始位数:结束位数] |
| .toLowerCase() |
小写 |
.lower() |
| .toUpperCase() |
大写 |
.upper() |
| .split(delimiter,limit) |
分割 |
.split(分割符,分割次数) |
3.布尔类型(Boolean)
JS里面的布尔值与Python不同
JS是纯小写的 而Python是首字母大写
(空字符串)、0、null、undefined、NaN都是false,其余都是ture
4.null与undefined(都是空)
null表示值为空(曾经拥有过)
undefined表示没有定义(从来没有过)
| JavaScript |
说明 |
python对应 |
| .length |
返回数组内数据的个数 |
len |
| .push(ele) |
尾部追加元素 |
.append() |
| .pop() |
获取尾部的元素 |
.pop() |
| .unshift(ele) |
头部插入元素 |
.insert 任意位置插入数据 |
| .shift() |
头部移除元素 |
del remove pop等方法 |
| .slice(start, end) |
切片 |
python切片操作 |
| .reverse() |
反转 |
.reverse() |
| .join(seq) |
将数组元素连接成字符串 |
无 |
| .concat(val, ...) |
连接数组 |
.extend() 扩展列表 |
| .sort() |
排序 |
.sort() |
| .forEach() |
将数组的每个元素传递给回调函数 |
|
| .splice() |
删除元素,并向数组添加新元素。 |
|
| .map() |
返回一个数组元素调用函数处理后的值的新数组 |
.map()映射 |
5.对象(object)
对象之数组(Array)>>>:类似于python中的列表
let l1 = []
对象之自定义对象(Object)>>>:类似于python的字典
let d1 = {'name':'jason',}
let d2 = new Object();
运算符
1.算术运算符
+ - * / % ++(自增1) --(自减1)
var x=10;
var res1=x++; 加号在后面 先赋值后自增
res1 = 10
赋值后增加1,此时x已经等于11
var res2=++x; 加号在前面 先自增后赋值
res2 = 12
2.比较运算符
!=(值不等 弱) ==(值相等 弱) ===(值相等 强) !==(值不等 强)

ps:会不会自动转换类型
3.逻辑运算符
&&(与) ||(或) !(非)
python and(与) or(或) not(非)
流程控制
1.单if分支
if (条件){
条件成立执行的代码
}
2.if...else分支
if(条件){
条件成立执行的代码
}else{
条件不成立执行的代码
}
3.if...else 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)
}
name
age
while循环
while(循环条件){
循环体代码
}
"""
三元运算
python中: 值1 if 条件 else 值2 条件成立用值1,不成立用值2
JS中: 条件?值1:值2 条件成立用?后面的值1,不成立用:后面的值2
"""
函数
"""
python中函数的定义
def 函数名(形参):
'''函数注释'''
函数体代码
return 返回值
"""
function 函数名(形参){
// 函数注释
函数体代码
return 返回值
}
# 匿名函数
var s1 = function(a, b){
return a + b;
}
# 箭头函数
var f = v => v;
var f = function(v){
return v;
}
var f = () => 5; =>左边是形参,右边是返回值
var f = function(){return 5};
var sum = (num1, num2) => num1 + num2;
var sum = function(num1, num2){
return num1 + num2;
}
1.JS中函数的形参与实参个数可以不对应
传少了就是undefined 传多了不用
2.函数体代码中有一个关键字arguments用来接收所有的实参
3.函数的返回值如果有多个需要自己处理成一个整体
内置对象
var d = new Date();
//getDate() 获取日
//getDay () 获取星期
//getMonth () 获取月(0-11)
//getFullYear () 获取完整年份
//getYear () 获取年
//getHours () 获取小时
//getMinutes () 获取分钟
//getSeconds () 获取秒
//getMilliseconds () 获取毫秒
//getTime () 返回累计毫秒数(从1970/1/1午夜)
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