JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。
JavaScript在1995年由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
JavaScript的标准是ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为ECMAScript 6 或者ES2015。
JavaScript引入方式有两种:
1.script标签内书写
<script> // 在这里写你的JS代码 </script>
2.引入额外的js文件
<script src="myscript.js"></script>
// 这是单行注释 /* 这是 多行注释 */
JavaScript中的语句要以分号(;)为结束符。
在JS中声明变量需要使用关键字
老版本 var(全部都是全局变量)
新版本 let(在ES6以后的版本可用,可以声明局部变量)
变量声明方式:
var name = 'tom' let name = 'jerry'
ES6新增const用来声明常量。一旦声明,其值就不能改变。
const pi=3.14 //修改会报错
js中可使用typeof来查看数据类型
typeof(name) //结果'string'
数值类型,包括了整型和浮点型
var a = 12.34; var b = 20;
还有一种NaN,表示不是一个数字(Not a Number)。
parseInt('ABC') //结果NaN,NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。
定义字符类型的方式:
1.单引号
2.双引号
3.反引号(多行字符串)
var a = 'hello' var b = "world" var c = `python js`
常用方法:
方法 | 说明 |
.length | 返回长度 |
.trim() | 移除空白 |
.trimLeft() | 移除左边的空白 |
.trimRight() | 移除右边的空白 |
.charAt(n) | 返回第n个字符 |
.concat(value, ...) | 拼接 |
.indexOf(substring, start) | 子序列位置 |
.substring(from, to) | 根据索引获取子序列 |
.slice(start, end) | 切片 |
.toLowerCase() | 小写 |
.toUpperCase() | 大写 |
.split(delimiter, limit) | 分割 |
其中字符串的拼接不推荐使用concat而是直接使用“+”号的方式
console.log(a+b) //结果 helloworld
反引号的形式还可用于格式化输出
var name1 = `tom` var name2 = `jerry` console.log(`${name1} and ${name2} are friend`) //结果 tom and jerry are friend
boolean类型即布尔值,true表示正确,false表示错误(都是全小写)。
""(空字符串)、0、null、undefined、NaN都是false。
null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;
undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。
var a = null // 定义了但是值为空 console.log(a) //结果 null var x // 未定义值 console.log(x) //结果undefined
数组对象的作用是:使用单独的变量名来存储一系列的值。类似于Python中的列表。
var l1=[111,222,333] console.log(l1[1]) //结果 222
常用方法:
方法 | 说明 |
.length | 数组的大小 |
.push(ele) | 尾部追加元素 |
.pop() | 获取尾部的元素 |
.unshift(ele) | 头部插入元素 |
.shift() | 头部移除元素 |
.slice(start, end) | 切片 |
.reverse() | 反转 |
.join(seq) | 将数组元素连接成字符串 |
.concat(val, ...) | 连接数组 |
.sort() | 排序 |
.forEach() | 将数组的每个元素传递给回调函数 |
.splice() | 删除元素,并向数组添加新元素。 |
.map() | 返回一个数组元素调用函数处理后的值的新数组 |
语法:forEach(function(currentValue, index, arr), thisValue)
参数:
参数 | 描述 | ||||||||
---|---|---|---|---|---|---|---|---|---|
function(currentValue, index, arr) | 必需。 数组中每个元素需要调用的函数。 函数参数:
|
||||||||
thisValue | 可选。传递给函数的值一般用 "this" 值。 如果这个参数为空, "undefined" 会传递给 "this" 值 |
l1.forEach(function(value,index,arr){ console.log(value,index,arr) }) /* 结果 111 0 (3) [111, 222, 333] 222 1 (3) [111, 222, 333] 333 2 (3) [111, 222, 333] */
语法:splice(index,howmany,item1,.....,itemX)
参数:
参数 | 描述 |
---|---|
index | 必需。规定从何处添加/删除元素。 该参数是开始插入和(或)删除的数组元素的下标,必须是数字。 |
howmany | 必需。规定应该删除多少元素。必须是数字,但可以是 "0"。 如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。 |
item1, ..., itemX | 可选。要添加到数组的新元素 |
l1.splice(2,1) //从第二个开始删除一个 console.log(l1) // 结果 [111, 222]
常用符号:
符号 | 说明 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
++ | 自增 |
-- | 自减 |
var x=10; var res1=x++; var res2=++x; res1; 10 res2; 12 // 这里由于的x++和++x在出现赋值运算式,x++会先赋值再进行自增1运算,而++x会先进行自增运算再赋值!
常用运算符:
符号 | 说明 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 弱等于 |
!= | 不等于 |
=== | 强等于 |
!== | 强不等于 |
1 == “1” // true 弱等于 1 === "1" // false 强等于 /* 上面这张情况出现的原因在于JS是一门弱类型语言(会自动转换数据类型),所以当你用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较。 */
常用符号:
符号 | 说明 |
&& | 与 |
|| | 或 |
! | 非 |
语法:
if(条件1){
条件1成立之后执行的代码
}else if(条件2){
条件2成立之后执行的代码
}else{
条件都不成立执行的代码
}
示例:
var a =3 if(a>5){ console.log('条件1') }else if(a=5){ console.log('条件2') }else{ console.log('条件3') } // 结果 条件2
语法:
switch(n) {
case 1: 执行代码块 1
break;
case 2: 执行代码块 2
break;
default: 与 case 1 和 case 2 不同时执行的代码
}
原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。
需要使用 break 来阻止代码自动地向下一个 case 运行。
示例:
var d=new Date().getDay(); switch (d) { case 0:x="今天是星期日"; break; case 1:x="今天是星期一"; break; case 2:x="今天是星期二"; break; case 3:x="今天是星期三"; break; case 4:x="今天是星期四"; break; case 5:x="今天是星期五"; break; case 6:x="今天是星期六"; break; } console.log(x) //结果 今天是星期五
语法:
for(起始值;循环条件;每次循环后执行的操作){
for循环体代码
}
示例:
var l1 = [111,222,333,444,555,666] for(let i=0;i<l1.length;i++){ console.log(l1[i]) } /* 结果 111 222 333 444 555 666 */
语法:
while(循环条件){
循环体代码
}
示例:
var i = 0; while (i < 4) { console.log(i); i++; } /* 结果 0 1 2 3 */
var a = 1; var b = 2; var c = a > b ? a : b //这里的三元运算顺序是先写判断条件a>b再写条件成立返回的值为a,条件不成立返回的值为b;三元运算可以嵌套使用;
语法:
// 普通函数定义 function f1() { console.log("Hello world!"); } // 带参数的函数 function f2(a, b) { console.log(arguments); // 内置的arguments对象 console.log(arguments.length); console.log(a, b); } // 带返回值的函数 function sum(a, b){ return a + b; } sum(1, 2); // 调用函数 // 匿名函数方式 var sum = function(a, b){ return a + b; } sum(1, 2); // 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱 (function(a, b){ return a + b; })(1, 2); //使用=>定义函数 var f = v => v; // 等同于 var f = function(v){ return v; }
arguments参数 可以获取传入的所有数据
function add(a,b){ console.log(a+b); console.log(arguments.length); console.log(arguments[0]);//arguments相当于将出传入的参数全部包含,这里取得就是第一个元素1 } add(1,2) /* 结果 3 2 1 */
JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键。
类似于python中的字典类型
创建对象方式:
var a = {'name':'tom','age':18} //方式1 var a = Object({'name':'tom','age':18}) //方式2
创建date对象:
//方法1:不指定参数 var d1 = new Date(); console.log(d1.toLocaleString()); //方法2:参数为日期字符串 var d2 = new Date("2004/3/20 11:12"); console.log(d2.toLocaleString()); var d3 = new Date("04/03/20 11:12"); console.log(d3.toLocaleString()); //方法3:参数为毫秒数 var d3 = new Date(5000); console.log(d3.toLocaleString()); console.log(d3.toUTCString()); //方法4:参数为年月日小时分钟秒毫秒 var d4 = new Date(2004,2,20,11,12,0,300); console.log(d4.toLocaleString()); //毫秒并不直接显示
常用方法:
常用方法 | 说明 |
getDate | 获取日 |
getDay | 获取星期 |
getMonth | 获取月(0-11) |
getFullYear | 获取完整年份 |
getHours | 获取小时 |
getMinutes | 获取分钟 |
getSeconds | 获取秒 |
getMilliseconds | 获取毫秒 |
getYear | 获取年 |
getTime | 返回累计毫秒数(从1970/1/1 0点) |
方法:
JSON.stringify() # 序列化
JSON.parse() # 反序列化
转换逻辑:
如果当前js中有一个布尔值true需要基于网络发送给python程序并且让python转换成布尔值 如何操作
1.在js中使用JSON.stringify()序列化成json格式字符串
2.基于网络发送给python程序(自动编码)
3.python接收 解码并反序列化
主要用于正则表达式
// 定义正则表达式两种方式 var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/; // 正则校验数据 reg1.test('jason666') reg2.test('jason666') /*第一个注意事项,正则表达式中不能有空格*/ // 全局匹配 var s1 = 'egondsb dsb dsb'; s1.match(/s/) s1.match(/s/g) var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g reg2.test('egondsb'); reg2.test('egondsb'); reg2.lastIndex; /*第二个注意事项,全局匹配时有一个lastIndex属性*/ // 校验时不传参数 var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/ reg2.test(); reg2.test(undefined); var reg3 = /undefined/; reg3.test(); RegExp