JavaSrcipt快速引入:
1.内部标签:
<script>alert('hello');script>
2.外部引入:
<script src="js/qj.js">script>
测试代码
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script src="js/qj.js">script>
head>
<body>
body>
html>
===是绝对等于,符号两边必须类型,数值完全一致。
==是等于,类型不一样,数值相同则为真。
NaN与任何数包括它本身都不相等。
尽量避免使用浮点数进行计算,存在精度问题。
浮点数问题:
console.log(Math.abs(1/3-(1-2/3))<0.0000001)
对象使用大括号{},数组使用中括号[]
var arr=[1,2,3,'hello']
new array(1,2,3)
对象每个属性使用逗号隔开,最后一个属性用加逗号。
var person={
name:'tianyi',
age:18,
tabs:[1,2,3]
}
'use strict';
let i=1;
use strict是严格检查模式一般写在第一行,let是定义局部变量。var是定义全部变量一般不建议使用。IDEA需要设置支持es6.
字符串:1.字符串可用单引号或者双引号
2.注意转义字符
Unicode字符集和AscII字符集都可
3.多行字符串编写
var msg=`hello
red
orange
nice`
4.模版字符串
let name="tianyi";
let msg=`nihao,${name}`
console.log(msg)
5.字符串长度
console.log(student.length)
6.字符串具有不可变性。
7.大小写转换
//这里是方法不是属性
console.log(student.toUpperCase())
console.log(student.toLowerCase())
8.console.log(student.indexOf(‘s’))字符串中字符第一次出现的下标。
9.console.log(student.substring(1,3))前包后不包。
数组:
1.定义
var arr=[1,2,3,4,5,6]
2.长度
arr.length
3.数组是可变的
给arr.length赋值,数组长度就会发生变化。赋值过小,会造成元素丢失。可以通过下标取值和赋值。
4.arr.indexOf(6)通过元素获得下标索引。
5.slice截取数组的一部分,返回一个新的数组。前面不包括,后面包括。
arr.slice(1,5)
6.push压入,pop弹出,只对数组尾部进行
arr.push(9,10)
arr.pop(10)
7.unshift数组头部压入,可以压入多个。shift,头部弹出,只能弹出一个。
arr.unshift('a','b')
arr.shift('a')
8.sort排序
arr.sort()
9.元素反转reverse()
arr.reverse()
10.拼接concat
arr.concat("A","B","C")
注:拼接不改变原来的数组,只是返回一个新数组。
11.join打印拼接数组
['c', 'b', 9, 8, 7, 6, 5, 4, 3, 2, 10, 1]
arr.join('-')
'c-b-9-8-7-6-5-4-3-2-10-1'
12.多维数组
arr=[[1,2],[3,4],["5","6"]]
(3) [Array(2), Array(2), Array(2)]
arr[1][1]
4
对象:属性使用键值对来表示,属性之间使用逗号隔开,最后一个属性不用书写逗号。JavaScript中所有的键都是字符串,值是任意的。
var student={
name:"tianyi",
age:18,
score:88
}
1.对象赋值:
student.name="tianming"
'tianming'
student.name
'tianming'
2.使用一个对象不存在的属性,不会报错
3.可以动态删减对象的属性。使用delete 去删除
delete student.name
true
4.动态添加属性
{
"age": 18,
"score": 88,
"sex": "nan"
}
5.判断一个属性是否是当前对象的
"age" in student
true
6.判断属性是否是当前对象独有
student.hasOwnProperty("age")
true
流程控制:
if…else…
let age=3;
if(age>2){
alert("hhh")
}else{
alert("kkk")
}
while循环,避免死循环。
while(age<100){
age+=1;
console.log(age)
}
for循环
for(let i=0;i<100;i++){
console.log(i)
}
for each循环
var arr=[1,2,3,4,5,6,78,]
arr.forEach(function (value) {
console.log(value)
})
for…in
var arr=[1,2,3,4,5,6,78,]
for(var num in arr){
console.log(arr[num])
}
Map和Set
var map=new Map([["tom",100],["jack",98]])
var name=map.get("tom");
console.log(name)
map.set("tony",52);//添加
map.delete("jack");//删除元素
var set=new Set([1,1,3])
set.add(2);
set.delete(2);
console.log(set.has(3));
迭代器Iterator:
遍历数组
var arr=[1,2,3]
for (let x of arr){
console.log(x)
}
//for...of遍历数组for...in输入数组下标
遍历Map:
var map=new Map([["jack",99],["tom",88],["jerry",66]])
for (let x of map) {
console.log(x)
}
遍历Set:
var set=new Set([4,26,39])
for (let x of set) {
console.log(x)
}
1.定义函数:
一旦执行到return,函数结束。没有执行到return,函数执行结束会返回undefined。
方式一:
function abs(x) {
if (x>=0) {
return x;
}else{
return -x;
}
}
方式二:
var abs=function (x) {
if (x>=0) {
return x;
}else{
return -x;
}
}
function{…}是匿名内部类可以赋值给abs,通过调用abs来达到调用函数的目的。
不存在参数如何规避:
var abs=function (x) {
//手动抛出异常
if (typeof x!=="number") {
throw "not a number!"
}
if (x>=0) {
return x;
}else{
return -x;
}
}
存在多个参数如何解决:使用arguments存储多余数据
var abs=function (x) {
//手动抛出异常
if (typeof x!=="number") {
throw "not a number!"
}
for (let s=0;s<arguments.length;s++) {
console.log(arguments[s])
}
if (x>=0) {
return x;
}else{
return -x;
}
}
rest:可以对参数以外的数进行操作
function ai(a,b,...rest) {
console.log("a=>"+a)
console.log("b=>"+b)
console.log(rest)
}
作用域:函数体内声明的变量,函数体外不可用(非用不可,可以使用闭包)。var定义的变量是有作用域的。
如果两个函数使用了相同的变量名,只要在函数体内,就不会产生冲突。
function ai() {
var x=1;
x+=1;
return x;
}
function ai1() {
var x="a";
x+=1;
return x;
}
内部函数可以使用外部变量,外部函数不能使用内部变量,不然会报错。
内外部函数变量重名,函数会由内而外进行查找,查找到同名变量,内部变量会屏蔽外部变量。
//x is not defined
function ai() {
var x=1+y;
console.log(x)
var y="y";
}
JS执行引擎,会提升y的声明,不会提升y的赋值。
注:所有变量声明定义,放在代码头部,方便维护。
全局函数:
'use strict'
var x=1;
function f() {
console.log(x)
}
f();
console.log(x)
全局对象:Window所有的全部变量与之相绑定
var x=1;
alert(x)
alert(window.x)
规范:由于全局变量绑定在Window上,不同Js文件使用相同的全局变量,会引发从冲突。解决方法:
//定义唯一全部变量
var TianYi={}
//让其他全部变量和函数与之相绑定
TianYi.name="tianyue";
TianYi.add=function (a,b) {
return a+b;
}
局部作用域let:
for (let i = 0; i <100 ; i++) {
console.log(i)
}
console.log(i+1)
//Uncaught ReferenceError: i is not defined
常量const:
const PI=3.14;
console.log(PI)