JavaScript
什么是JavaScript
- JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。
- 它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
JavaScript组成部分
- ECMAScript,描述了JavaScript的语法和基本对象
- 文档对象模型(DOM),描述处理网页内容的方法和接口
- 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口
特性
- 脚本语言。JavaScript是一种解释型的脚本语言,C、C++语言先编译后执行,而JavaScript是在程序的运行过程中逐行进行解释。
- 基于对象。JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。
- 简单。JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言,其设计简单紧凑。
- 动态性。JavaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的输入做出响应。在访问一个网页时,鼠标在网页中进行鼠标点击或上下移、窗口移动等操作JavaScript都可直接对这些事件给出相应的响应。
- 跨平台性。JavaScript脚本语言不依赖于操作系统,仅需要浏览器的支持。因此一个JavaScript脚本在编写后可以带到任意机器上使用,前提上机器上的浏览器支 持JavaScript脚本语言,目前JavaScript已被大多数的浏览器所支持。
JavaScript引入方式
Script标签内写代码
<script>
//在这里写代码
</script>
引入额外的js文件
<script src="js文件名.js"></script>
JavaScript语言规范
注释
//单行注释
/*
多行注释
*/
结束符
JavaScript中的语句要以分号(;)为结束符
JavaScript语言基础
变量声明
- JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头
- 声明变量使用var 变量名;的格式来惊醒声明
var name="guapi";
var age=19;
PS
- 变量名是区分大小写的
- 推荐使用驼峰式命名规则
- 保留字不能作为变量名
let变量
ES6新增let命令,用法类似与var,但是let只在代码块内有效,类似于其他语言中的全局变量和局部变量
常量声明
ps:ES6新增const来声明常量。一旦声明,值不可更改
const pi = 3.1415;
pi //3.1415
pi=3 //跳错
JavaScript数据类型
JavaScript拥有动态类型
var x;//此时x为undefined
var x=1;//此时是数字
var x="guapi";//此时为字符串
数值(Number)
JavaScript不区分整形和浮点型,就只有一种数字类型
var a=12.34;
var b=20;
var c=123e5; //12300000
var d=123e-5//0.00123
还有一种方法NaN,表示不是一个数字(Not a Number)
常用方法:
parseInt("123") //返回123
parseInt("ABC")//返回NaN,NaN属性是代表非数字值得特殊值。该属性用于指示某个值不是数字。
parseFloat("123.456")//返回123.456
字符串(string)
var a="hello";
var b="world";
var c=a+b;
console.log(c);//得到helloworld
常用方法
方法 | 说明 |
---|---|
.length() | 返回长度 |
.trim() | 移除空白 |
.trimleft() | 移除左边得空白 |
.trimRight() | 移除右边得的空白 |
.charAt(n) | 返回第n个值 |
.concat(value,...) | 拼接 |
.indexOf(substring,start) | 子序列位置 |
.substring(from,to) | 根据索引获取子序列 |
.slice(start,end) | 切片 |
.toLowerCase() | 小写 |
.toUpperCase() | 大写 |
.split(delimiter,limit) | 分割 |
拼接字符串一般使用“+”
JavaScript中的嵌入变量
ES6中引入了模板字符串。模板字符串是增强版的字符串,用反引号(`)标识。可以作为普通字符串,也可以用来定义多行字符串,或者在字符串中嵌入变量,有点像python中的format
var name="guapi";
`hello ${name}`;
布尔值(Boolean)
区别于Python,true和false都是小写
var a = true;
var b = false;
""(空字符串)、0、null、undefined、NaN都是false。
null和undefined
- null表示值是空,一般是在需要指定或清空一个变量时才会使用,如name=null;
- undefined表示档声明一个变量但未初始化时,该变量的默认值时undefined。还有就是函数无明确的返回值时,返回的也是undefined
null表示变量的值是空(null可以手动清空一个变量的值,使得该变量为object类型,值为null),undefined表示只声明了变量,但还没有赋值。
对象(object)
- JavaScript中得所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript允许自定义对象。
- JavaScript提供多个内建对象,比如String、Date、Array等等
- 对象知识带有属性和方法得特殊数据类型
数组
- 数组对象的作用是:使用单独的变量名来存储一系列的值。类似于python中的列表
var a=[123,"abc"]
console.log(a[1])///"abc"
常用方法:
方法 | 说明 |
---|---|
.length() | 数组的大小 |
.push(ele) | 尾部追加元素 |
.pop() | 获取尾部的元素(会删除尾部元素) |
.unshift(ele) | 头部插入元素 |
.shift() | 头部移除元素 |
.slice(start,end) | 切片 |
.reverse() | 反转 |
.join(seq) | 将数组元素连接成字符串 |
.concat() | 连接数组 |
.sort() | 排序(根据ASSIC) |
.forEach() | 将数组的每个元素传递给回调函数 |
.splice() | 删除元素,并向数组添加新元素 |
.map() | 返回一个数组元素调用函数处理后的值的新数组 |
forEach()
语法
- forEach(function(currentValue,index,arr),thisValue)
参数
参数 | 描述 | ||||||||
---|---|---|---|---|---|---|---|---|---|
function(currentValue, index, arr) | 必需。 数组中每个元素需要调用的函数。函数参数:
|
||||||||
thisValue | 可选。传递给函数的值一般用 "this" 值。 如果这个参数为空, "undefined" 会传递给 "this" 值 |
splicce()
语法
- splice(index,howmany,item1,.....,itemx)
参数
参数 | 描述 |
---|---|
index | 必须。规定从何处添加/删除元素。该参数是开始插入和(或)删除的数组元素的下标,必须是数字 |
howmany | 必须。规定应该删除多少元素。必须是数字,但可以是"0".如果没有规定此参数,则删除从index开始到最后的所有元素 |
item1,...,itemX | 可选。要添加到数组的新元素 |
map()
语法
- map(function(currentValue,index,arr),thisValue)
参数
参数 | 描述 | ||||||||
---|---|---|---|---|---|---|---|---|---|
function(currentValue, index, arr) | 必需。 数组中每个元素都会执行这个函数。函数参数:
|
||||||||
thisValue | 可选。传递给函数的值一般用 "this" 值。 如果这个参数为空, "undefined" 会传递给 "this" 值 |
运算符
算数运算符
+ - * / % ++ --
x++表示先赋值在进行++运算
++x表示先运算,在赋值
比较运算符
> >= < <= != == === !==
PS:
1=="1"//true弱等于
1==="1"//false强等于
因为js是一门弱语言,所以使用两个等比运算符进行比较时,js会先进行转换,将数字类型的转换为字符串类型的
逻辑运算符
&& || !
与 或 非
赋值运算符
= += -= *= /=
流程运算符
if-else
var=10;
if (a>5)
{
console.log("yse");
}else{
console.log("no");
}
if-else if-else
var a=10
if a>5{
console.log("a>5");
}
else if(a<5){
console.log("a<5");
}
else{
console.log("a=5");
}
switch
var 99;
switch (day/10){
case 9:
console.log("优秀")
break
d
case 8 :
console.log("良好")
break:
default;
console.log("没有查到你的成绩")
}
如果switch语句一般都会加cas,防止switch继续执行
for循环
for(var i =0;i<10;i++){
console.log(i);
}
while
while i=0;
三元运算
var a=1;
var b=2;
var c= a>b?:a:b
如果a>b那么把a给c否则把b给c
函数
函数定义:
与其他语言的函数非常类似,就是定义方式有区别
//函数的定义方式
function f1(参数){
代码块
}
补充:
ES6中允许使用箭头来定义函数(=>)
var f =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;//这里的return只能返回一个值,如果想返回多个值需要自己手动给他们包一个数组或对象中
}
函数中的arguments参数
function add(a,b){
console.log(arguments);//相当于把传入的参数全部包含,放在一个列表里面
}
内置对象和方法
类型 | 内置对象 | 介绍 |
---|---|---|
数据类型 | Number | 数字对象 |
String | 字符串对象 | |
boolean | 布尔对象 | |
组合对象 | Array | 数组对象 |
Math | 数学对象 | |
Date | 日期对象 | |
高级对象 | Object | 自定义对象 |
Error | 错误对象 | |
Function | 函数对象 | |
RegExp | 正则表达式对象 | |
Global | 全局对象 |
自定义对象
JavaScript的对象(Object)本质上时键值对的集合(Hash结构),但是只能用字符串作为键
var a={
"name":"guapi","age":18
}
获取和遍历对象中的内容
var a={
"name":"guapi","age":18
}
//遍历
for (var i in a){
console.log(i,a[i]);
}
//取值
a["name"]
a.name
Date对象
创建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()); //毫秒并不直接显示
Date对象的方法:
var d = new Date();
//getDate() 获取日
//getDay () 获取星期
//getMonth () 获取月(0-11)
//getFullYear () 获取完整年份
//getYear () 获取年
//getHours () 获取小时
//getMinutes () 获取分钟
//getSeconds () 获取秒
//getMilliseconds () 获取毫秒
//getTime () 返回累计毫秒数(从1970/1/1午夜)
JSON对象
var str1 = '{"name": "Alex", "age": 18}';
var obj1 = {"name": "Alex", "age": 18};
// JSON字符串转换成对象
var obj = JSON.parse(str1);
// 对象转换成JSON字符串
var str = JSON.stringify(obj1);
RegExp对象
// 定义正则表达式两种方式
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();
Math对象
abs(x) 返回数的绝对值。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。