JavaScript
JavaScript
///定义变量 变量类型 变量名 = 变量值;
var num =1;
const name = "logteng ";
// alert(num);
// alert(name);
//2.条件控制
const score=70;
if (score>70&&score<=80){
alert("优秀")
}else if (score>60&&score<=70){
alert('及格')
}else{
alert('不及格')
}
//console.log(score)浏览器控制台打印变量
/*
* 多行注释
* */
数据类型
**3.数据类型**
文本,数值,图形,音频,视频....
//js不区分小数和整数
**number**
123//整数123
123.3//浮点数
//科学计数法
-99//负数
NaN //not a number不是数值
Infinity //表示无限大
**字符串**
'abc' "abc"
**布尔值**
true false
**逻辑运算
比较运算符
=
== 等于(类型不一样,值一样,也会判断为true)
=== 绝对等于(类型一样,值一样,结果为true)
须知
NaN与所有的值不相等
只能通过isNaN来判断**
浮点数问题
console.log((1/3)===(1-2/3))
尽量避免使用浮点数运算,存在精度问题
math.abs((1/3)-(1-2/3))<0.0000001
null和undefine
- null 空
- undefine 未定义
数组
Java数组必须是相同类型的对象,Js中不需要这样
//保证代码可读性,尽量使用[]
const arr = [1,2,3,'hello',"helloworld"]
去数组下标,如果越界,就会undefine
对象
对象是大括号{},数组是中括号[]
每个属性中间用逗号隔开,最后一个不需要
//Person person = new Person();
const person={
name : '张三',
age : 3,
tags:['js','java','web','...']
}
/*
person.name
>'张三'
person.tags
>['js', 'java', 'web', '...']
0: "js"
1: "java"
2: "web"
3: "..."
length: 4
* */
严格检查模式
规范:es6
<script>
// 严格检查模式'use strict';
//预防JavaScript的随意性导致的问题
//局部变量使用let 去定义
//必须写在JavaScript语法快下第一行
'use strict';
let i = 1
</script>
数据类型
[字符串]
字符串
- 正常的字符串我们使用单引号,或者双引号包裹
- 注意转义字符\
\'
\n 换行
\t tab
\u#### Unicode字符
\x41 Ascll字符
- 多行字符编写
// tab上面 esc下面
let msg=`
hello
world
nihaoya
你好
`
- 模板字符串
letname='老秦';
letage= 18;
letmsg22=`你好呀 ,${name},${age}`
console.log(msg22)
// >1 你好呀 ,老秦,18
- 字符串长度
str.length
- 字符串的不可可变性,不可变
- 大小写转换
//注意,这里是方法,不是属性
console.log(msg.toUpperCase())//转换成大写
console.log(msg.toLowerCase())//转换成小写
- indexof 获取指定字符的位置
- substring
[...)
xxx.substring(1)//从第一个字符串截取到最后一个字符串
xxx.substring(1,3)//[1,3)
[数组]
数组
array可以包含任意的数据类型
var arr = [1,2,3,4,5,6]
arr[0]
arr[0]=1
- 长度
arr.length
注意:假如给arr.length赋值,数组大小就会发生,如果赋值国小,元素就会丢失
- indexOf,通过元素获得下标索引
arr.indexOf(2)
1
字符串的1和数字1 是不同的
- slice()截取arrayde一部分,返回一个新数组,类似于String中的substring
- push,pop
push:压入到尾部
pop:弹出尾部的一个元素
- unshift(),shift() 头部
unshift():压入到头部
shift():弹出头部的一个元素
- 排序用sort()
- 元素反转reverse()
var arr =['c','b','a']
arr.reverse()
(3) ['a', 'b', 'c']
- concat()
注意:这个方法没有修改数组,返回了一个新的数组
var arr =['c','b','a']
arr.concat('4','r')
(5) ['c', 'b', 'a', '4', 'r']
- 连接符join
打印拼接数组,使用特定的字符串连接
var arr =['c','b','a']
arr.join('-')
'c-b-a'
- 多维数组
arr = [[1,2],[3,4],["5","6"]]
0: (2) [1, 2]
1: (2) [3, 4]
2: (2) ['5', '6']
- fill 填充数组
数组:存储数据(存,取)
[对象]
对象
若干个键值对
var 对象名={
属性名:属性值,
属性名:属性值,
属性名:属性值
}
//定义一个person对象,他拥有四个对象
var person={
name:"狂神",
age:18,
email:"20190101@gmail.com",
score:0,
}
/*person
{name: '狂神', age: 18, email: '20190101@gmail.com', score: 0}
age: 18
email: "20190101@gmail.com"
name: "狂神"
score: 0*/
js中队象,{….}表示一个对象,键值对描述属性,xxxx:xxxx,多个属性之间使用逗号隔开,左后一个属性不加逗号!
javaScript中的所有的键都是字符串,值是任意对象
- 对象赋值
person.name='张三'
>'张三'
person.name
>'张三'
- 使用一个不存在的对象属性,不会报错!undefine
person.kk
>undefined
- 动态删减属性
delete person.name
>true
<person
//#################
{age: 18, email: '20190101@gmail.com', score: 0}
age: 18
email: "20190101@gmail.com"
score: 0
- 动态的添加,直接给新的属性添加值即可
person.hh='哈哈'
'哈哈'
//################
{age: 18, email: '20190101@gmail.com', score: 0, hh: '哈哈'}
age: 18
email: "20190101@gmail.com"
hh: "哈哈"
score: 0
- 判断属性值是否在这个对象中! xxx in xxx!
age in person
VM500:1 Uncaught ReferenceError: age is not defined
at <anonymous>:1:1
//#################
'age' in person
true
//##########
toString in person
false
//继承
'toString' in person
true
- 判断一个属性是否是这个对象自身拥有hasOwnProperty
person.hasOwnProperty('toString')
false
person.hasOwnProperty('age')
true
流程控制
- forEach
5.1
var age = [12,12,12,1,3,54,564,6,4,65];
//函数
age.forEach(function (value) {
console.log(value)
})
- for …in
var age = [12,12,12,1,3,54,564,6,4,65];
for (const ageKey in age) {
console.log(age[ageKey])
}
[Map和Set]
Map和Set
Map:
const map= new Map([['tom',100],['jack',90],['haha',70]])
const name = map.get('tom');//通过key获取value
map.set('admin',20) //新增或修改
console.log(name)
map.delete('tom')//删除
Set:无序不重复的集合
const set = new Set([3,1,1,1,1])//set可以去重
//##########
/*Set(2) {3, 1}
[[Entries]]
0: 3
1: 1*/
set.add(2)//添加
set.delete(1)//删除
set.has(3) //是否包含某个元素
iterator
遍历数组
遍历map
遍历set
//通过for of /for in下标
var arr = [3,4,5]
for (var x of arr){
console.log(x)
}
函数
方法:对象(属性,方法)
函数:
- 定义函数
public 返回值类型 方法名(){
return 返回值;
}
绝对值函数
function abs(x){
if(x>0){
return x;
}else{
return -x;
}
}
//#########
abs(-10)
10
一旦执行到return 代表函数结束,返回结果
如果没有执行return,函数执行完也会返回结果,结果为undefine
var abs = function(x){
}
function(x){……}这是一个匿名函数.但可以把结果赋值给abs,通过abs就可以调用函数
abs(10)
abs(-10)
参数问题:JavaScript可以传递任意个参数,也可以不传递参数
参数进来是否存在的问题?假设不存在规避
function abs(x){
if(typeof x !=='number'){
//手动抛出异常
throw 'Not a number';
//Uncaught Not a number
}
if(x>0){
return x;
}else{
return -x;
}
}
参数存在多个
arguments是一个赠送的关键字
代表传递进来的所有参数,是一个数组~~~
**function abs(x){
for (let j = 0; j < arguments.length; j++) {
console.log(arguments[j]);
}
if(x>0){
return x;
}else{
return -x;
}
}**
问题:argument 包含所有的参数,在使用多余的参数来进行附加操作时需要排除已有的参数
rest
es6引入的新特性,获取除了已经定义的参数之外的参数
function aaa(a, b, ...rest) {
console.log(a)
console.log(b)
console.log(rest)
}
/*aaa(2,4,66,6,6)
a: 2
b:4
[66, 6, 6]
*/
rest参数只能写在最后面,用…rest标识