数据类型
数值,文本,图形,音频,视频。。。
变量
var
number
js不区分小数和整数
123//整数123
123.1//浮点数
1。123e3//科学计数法
-99 //负数
NaN // not a number 不是一个数
Infinity //表示无限大
字符串
- 正常字符串我们使用单引号,或者双引号包裹
- 注意转义字符\
\'
\n
\t
\u4e2d \u#### Unicode 字符
\x41 AscII字符
- 多行字符串编写
//tab 上面esc键下面
var msg = `helo
hah
哈哈
giao`
- 模板字符串
let name = "bai";
let msg = "你好,${name}" //输出你好,bai 和+的功能一样
console.log(name)
- 字符串长度
str.length
- 字符串的可变性,不可变
- 大小写转换
//注意,这里是方法,不是属性
student.toUpperCase()
student.toLowerCase()
- substring
[)
student.substring(1) //从第一个字符串截取到最后一个字符串
student.substring(1,3) //[1,3) 包含第一个不包含第三个
比较运算符
= //赋值
== //等于(类型不一样,值一样,也会被判定为true) 如1和‘1’用==判断为true
=== //绝对等于(类型一样,值一样才能被判断为true)
坚持不要是用==进行比较
须知:
- NaN===NaN,这个与所有的数值都不相等,包括自己
- 只能通过isNaN(NaN)来判断这个数是否是NaN
console.log((1-3)===(1-2/3))
尽量避免使用浮点数进行运算,存在精度问题!
Math.abs(1/3-(1-2/3))<0.00000001
数组
java的数值必须是相同类型的对象,JS中不需要这样!
//保证代码的可读性,尽量使用[ ]
var arr = [1,2,3,4,5,'hello',null,true];
new Array(1,2,3,4,5,'hello',null,true);
取数组下标:如果越界了,就会 undefined
1.长度
arr.length
注意:加入给arr.length赋值,数组大小就会发生变化,如果赋值过小,元素就会丢失。
2.indexOf,通过元素获得下标索引
arr.indexOf(2); //下面的1是数组元素中为2的下标为1
1
字符串的“1”和数字1是不同的
3. slice()
截取Array的一部分,返回一个新数组,类似于String中的substring
4.push(),pop()
push: 压入到尾部
pop:弹出尾部的一个元素
如: var arr = [1,2,3,4]
push('a','b');
// arr数组就会变成[1,2,3,4,"a","b"]
arr.pop();
"b"
//此时arr数组就会变成[1,2,3,4,"a"];
5.unshift(),shift() 头部
unshift()是压入到数组头部
shift()是弹出头部的一个元素
这两个的用法和push()pop()一样,只不过是这两个针对头部
6.排序sort()
(3)["B","C","A"]
arr.sort()
(3)["A","B","C"]
7.元素反转reverse()
(3)["A","B","C"]
arr.sort()
(3)["C","B","A"]
8.concat()
(3)["C","B","A"]
arr.concat([1,2,3])
(6)["C","B","A",1,2,3]
arr
(3)["C","B","A"]
注意:concat()并没有修改数组,只是会返回一个新的数组
9.连接符join
打印拼接数组,使用特定的字符串链接
(3)["C","B","A"]
arr.join('-');
"C-B-A"
10.多维数组
arr=[[1,2],[3,4],["5","6"]];
arr[1][1]
4
对象
对象是大括号,数组是中括号,每个属性之间使用逗号隔开,最后一个不需要添加分号,不加逗号
//Person person = new Person(1,2,3,4,5);
//下面是定义了一个person对象,有四个属性
var person = {
name:"baixiaobai",
age:22,
tags:['js','java','web']
}
1.取对象的值:
person.name=“baixiaobai” //赋值
“baixiaobai”
person.name
>"baixiaobai"
person.age
>22
2.使用不存在的对象属性,不会报错! undefined
如:
person.hello
undefined
3.动态的删减属性
delete person.name
true
4.动态的添加,直接给新的属性添加值即可
person.haha="haha"
"haha"
5.判断属性值是否在这个对象中 xxx in xxx
'age' in person
true
//继承
'toString' in person
true
6.判断一个属性是否是这个对象自身拥有的 hasOwnProperty()
person.hasOwnProperty('toString')
false
person.hasOwnProperty('age')
true
流程控制里的forEach循环输出数组元素
var age = [12,12,325,234,12,52,32,43,543]
//函数
age.forEach(function (value){ //(foreach是5.1引入的)
console.log(value)
})
Map和Set
ES6的新特性
Map:
//学生成绩,学生名字
//var names = ["tom","jack","haha"];
//var scores = [100,90,80]
var map = new Map[['tom',100],['jack',90],['haha',29]]);
var name = map.get('tom'); 通过key获得value
map.set('admin',1231); 新增或者修改
map.delete("tom"); 删除
Set:无序不重复的集合
set.add(2); 添加
set.delete(1); 删除
console.log(set.has(3)); 是否包含某个元素
iterator
遍历数组:
通过for of 实现遍历数值/ 通过for in 遍历的是下标
var arr = [3,4,5]
for(var x of arr){
console.log(x)
}
遍历map
var map = new Map[['tom',100],['jack',90],['haha',29]]);
for(let x of map){
console.log(x)
}
遍历set
var set = new Set([5,6,7]);
for(set x of set){
console.log(x)
}
严格检查模式
前提:IDEA需要设置支持ES6语法
‘use strict’; 严格检查模式,预防JavaScript的随意性导致产生的一些问题
这行代码必须写在JavaScript的第一行
局部变量建议都是用let去定义