什么是JavaScript
一门脚本语言,可以在浏览器上直接解释
ECMAScipt
一个JavaScript的标准,最新版本到es6
快速入门
<!--在script标签内,写javascript代码
弹出helloword-->
<script>
alert("helloworld");
</script>
也可以把JavaScript语句放在js文件中,再引用
<script src="js/tc.js">
</script>
也可在浏览器的控制台测试
alert(1)
undefined
console.log(3)
基本语法
定义变量
<script>
//1.定义变量 : 变量类型 变量名 = 变量值;
var num =1; //不需要指定变量类型
var name = "lyc";
</script>
条件控制
<script>
if (2>1){
alert("true");
}
else {
alert("false");
}
</script>
数据类型
-
数值 js不区分小数和整数
number:
123 //整数 123.1 //浮点数 1.123e3 //科学计数法 NaN //不是数值 Infinity //无限大
-
字符串
-
布尔值 true,false
-
逻辑运算 && || !
-
比较运算符
= 赋值 == 等于 值一样 类型不一样也为true === 绝对等于 类型一样 值一样才为true NaN === NaN 结果为false 只能通过isNaN() 判断
-
null和undefined 空和未定义
-
数组 一些列相同类型的对象
var arr = [1,2,3,4,5] 数组越界会underfined
-
对象 大括号
var person = { name: "lyc", age: 3, tags: [3,23,23,23] }
浮点数问题
精度损失: 1/3 === 1-2/3 的结果为false
尽量避免使用浮点数进行运算
严格检查模式
预防js随意性产生的问题,局部变量建议使用let定义
‘use strict’
数据类型
字符串
console.log("a");
console.log("a\""); 转义字符
/u4e2d Ascll字符
let name = "lyc";
let msg='你好呀,${name}' //模板字符串
str.length 字符串长度
str.toUpperCase(); 大写
str.toLowerCase(); 小写
str.indexof();
str.substring(a,b) 从坐标a开始到b结束,不包括b
数组
可以包含任意的数据类型
var arr = [1,2,3,4,5,6]
arr.length 数组的长度 给arr.length 赋值 数组的大小会变化
赋值过小 数据会丢失
arr.indexOf(2) 获得下标索引
arr.slice() 截取数组的一部分 返回一个新数组
arr.push pop()
arr.unshift() shift() 在头部增加/删除元素
arr.sort(); 排序
arr.reverse(); 元素反转
arr.concat();数组拼接返回新的数组 并不影响原来的数组
arr.join("-"); 打印拼接数组,使用特定的字符串连接
var array=[3,4,5]
for (var x of array){
console.log(x);
}
对象
var person = {
name: lyc,
face: shuaiqi
}
person.name= xhc ; 对象赋值
使用一个不存在的对象属性,不会报错
delete person.name 动态的删减对象属性
person.asd=xhc ; 动态添加对象属性 直接给新的属性添加至
person.hasOwnProperty("name") 判断一个属性是否是这个对象自身拥有的
Map和Set集合(ES6新特性)
var map=new Map([['tom',100],['33','90'],[323,23]]);
var name= map.get('tom');
console.log(name);
map.set('admin',123456); //往map里增加值
Set:无序不重复的集合,可以用来去重
var set=new Set([3,1,1,3,2,3,2]);
console.log(set);
set.add();
set.delete();
set.has() set集合是否含有属性
遍历Map,Set
var map =new Map([['TOM',100],['lyc',200],['xhc',300]]);
for (let x of map){
console.log(x)
}
var set =new Set(5,6,7);
for (let x of set){
console.log(x);
}
函数
类似java的方法,一旦执行到return代表函数结束
如果没有执行return,函数执行完会返回undefined
定义
//绝对值函数
//可以传任意个参数,但只有相应的参数
function abs(x){
if(x>0){
return x;
}
else{
return -x;
}
var abs1 = function (x){
if(x>0){
return x;
}
else{
return -x;
}
}
if (typeof x!=='number'){
throw 'Not a number';
} //参数判断
arguments.length() //代表传递进来的参数的长度,arguments是一个数组,包含了所有传递进来的参数
rest //代表已经定义的参数之外的所有参数
变量的作用域
- 函数体中声明的变量,在函数体外不可以使用
- 函数体可以使用外部定义过的变量
- 函数查找变量从自身开始,再到外部函数或外部,由内向外查找
- JavaScript执行引擎可以提升声明,但不提升变量的赋值
- 所有的全局变量,都会自动绑定在windows对象下
规范
//唯一全局变量
var lycapp={};
lycapp.name='lyc';
lycapp.add = function (a,b){
return a+b;
}
//把自己的代码全部放入自己定义的唯一空间名字中,降低全局变量冲突的概率
局部作用域 let
常量 const ES6语法
方法
放在对象里面的函数
var lycapp={
name:'lyc';
add : function (a,b){
return a+b;
}
}
this默认指向调用他的对象
内部对象
标准对象
- number
- string
- boolean
- object
- function
- undefined
Date
var date=new Date();
date.getFullYear();//年
date.getMonth();//月 月份从0到11
date.getDate();//日
date.getDay();//周几
date.getTime();//时间戳
date1=new Date(date.getTime());//时间戳转为本地时间
date1.toLocalString();
date1.toGMTString();
JSON
JavaScript对象都可以用JSON表写
- 对象用{}
- 数组用[]
- 键值对用key:value
var user={
name: "lyc",
email: "25533@qq.com",
sex: '男'
}
//对象转换为JSON字符串
var JSONUSer=JSON.stringify(user);
//JSON字符串转化为对象
JSON.parse(JSONUSer);
JSON和JS对象之间的区别
var obj={a: 'hello',b: 'hello'} //JS对象
var Json='{"a": "hello","b": "hello"}' //JSON字符串