<script>
...
</script>
2、外部引入
<script> alert('helloworld'); </script> <!--外部引用--> <script src="js/qj.js"></script> <!--不用显示定义type,也默认就是javascript--> <script type="text/javascript"></script>
123//整数 123.1//浮点数 1.123e3//科学计数法 -99//负数 NaN//not a number Infinity//无限大
字符串
'abc' "abc"
布尔值
true false
逻辑运算
&& 两个都为真,结果为真 || 一个为真,结果为真 ! 取反
比较运算符
=
== 等于(类型不一样,值一样,也会判断为true)坚持不要使用
=== 绝对等于(类型一样,值一样,结果true)
须知:
-
-
只能通过isNaN(NaN)来判断这个数是否是NaN
浮点数问题:
console.log((1/3)===(1-2/3))
尽量避免使用浮点数进行运算,存在精度问题
Math.abs(1/3-(1-2/3))<0.0000000001
null和 undefined
- null 空
- undefined 未定义
数组
java的数组必须要相同类型的对象,js不需要
var arr = [1,2,3,'hello',null,true]
取数组下标,如果越界,就会undefined
对象
对象是大括号,数组是中括号
var person={ name: "mmmm", age: 2, tags:['js','java','...'] }
取对象的值
person.name
注意转义字符\
\'
\n
\u4e2d Unicode字符
\x41 ASCII字符
多行字符串编写
var msg = ` hello world hhh `
模板字符串
let name="mm"; let age = 3; let msg=`你好呀,${name}`
字符串长度
var student="student" console.log(student.length)
字符串的可变性,不可变
//这里是方法,不是属性 student.toUpperCase() student.toLowerCase()
substring
student.substring(1)//从第一个字符串截取到最后一个字符串 student.substring(1,3)//[1,3)
var arr=[1,2,3,4]; arr[0] arr[0]=1
长度
arr.length
注意:加入给arr.length赋值,数组大小就会发生变化,如果赋值过小,元素就会丢失
indexOf 通过元素获得下标索引
arr.indexOf(2)
slice() 截取array中的一部分,返回一个新数组,类似String中的substring
push(),pop()
push:压入到尾部
unshift:压入到头部
排序sort()
元素反转 reverse()
拼接concat()
注意:concat()并没有修改数组,只是会返回一个新的数组
连接符join()
var arr=["A","B","C"] arr.join('-') "A-B-C"
多维数组
arr=[[1,2],[3,4],["5","6"]]
arr[1]
var 对象名={ 属性名: 属性值, 属性名: 属性值, 属性名: 属性值 }
多个属性之间使用逗号隔开,最后一个属性不加逗号
JavaScript中的所有键都是字符串,值是任意对象
1、对象赋值
person.name="mmm"
3、动态的删减属性
delete person.name
4、动态的添加,直接给新的属性添加值
person.age=23
5、判断属性值是否在这个对象中
'age' in person true //继承 'toString' in person true
6、判断一个属性是否是这个对象自身拥有的
person.hasOwnProperty('toString') false person.hasOwnProperty('age') true
if判断
循环while
for循环
forEach循环
var age=[12,5,2,546,1215,1245,45]; age.forEach(function (value) { console.log(value) })
for...in循环
for(var num in age){ if(num.hasOwnProperty(num)){ console.log("存在") console.log(num) } }
var map = new Map([['tom',100],['jack',90],['mm',80]]); var name = map.get('tom');//通过key获得value map.delete('tom') map.set('admin',123456); console.log(name);
Set:无序不重复的集合
var set = new Set([3,1,1,1]);//set可以去重 set.add(2); set.delete(1) console.log(set.has(3))
//通过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],['mm',80]]); for(let x of map){ console.log(x) }
遍历Set
var set = new Set([5,6,7]); for(let x of set){ console.log(x) }
函数
定义方式一:
function abs(x){ if(x>=0){ return x; }else{ return -x; } }
如果没有执行return,函数执行完也会返回结果,结果就是undefined
定义方式二:
var abs = function(x){ if(x>=0){ return x; }else{ return -x; } }
function(x){...} 这是一个匿名函数,但是可以把结果赋值给abs,通过abs调用函数
调用函数
abs(10)//10 abs(-10)//10
参数问题:javascript可以传任意个参数,也可以不传递参数
假设不存在参数,如何规避?
function abs(x){ //手动抛出异常 if(typeof x!=='number'){ throw 'Not a Number'; } if(x>=0){ return x; }else{ return -x; } }
在javascript中,var定义变量实际是有作用域的
假设在函数体中声明,则在函数体外不可以使用
如果两个函数使用了相同的变量名,只要在函数内部,就不冲突
内部函数可以访问外部i函数的成员,反之则不行
假设在javascript中函数查找变量从自身函数开始,由内向外查找。
假设外部存在这个同名的函数变量,则内部函数会屏蔽外部
所有的变量定义都放在函数的头部,便于代码维护
javascript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错referenceerror
规范
由于我们所有的全局变量都会绑定到window上。如果不同的js文件,使用了相同的全局变量,就会发生冲突
//唯一全局变量 var orangeApp = {}; //定义全局变量 orangeApp.name = 'orange'; orangeApp.add(function (a,b) { return a+b; })
把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突问题
局部作用域let
建议使用let去定义局部作用域的变量
常量const
在ES6引入了常量关键字
const PI='3.14';//只读变量 console.log(PI);
定义方法
方法就是把函数放在对象里面,对象只有两个东西,属性和方法
var orange = { name:'mmm', birth:2000, //方法 age:function () { var now = new Date().getFullYear(); return now-this.birth; } } //属性 orange.name //方法,一定要带括号 orange.age()
apply
在js中可以控制this指向
function getAge() { var now = new Date().getFullYear(); return now-this.birth; } var orange = { name:'mmm', birth:2000, //方法 age:getAge() }; getAge.apply(orange,[]);//this指向了orange,参数为空
内部对象
var now=new Date(); now.getFullYear();//年 now.getMonth();//月0-11代表月 now.getDate();//星期几 now.getHours();//时 now.getMinutes();//分 now.getSeconds();//秒 now.getTime();//时间戳 全时间统一1970.1.1 0.00.00开始经过的秒 console.log(new Date(1622622448586))//时间戳转为时间
转换
now = new Date(1622622448586) Wed Jun 02 2021 16:27:28 GMT+0800 (中国标准时间) now.toLocaleString//注意调用的是一个方法,不是一个属性 ƒ toLocaleString() { [native code] } now.toLocaleString() "2021/6/2下午4:27:28" now.toGMTString() "Wed, 02 Jun 2021 08:27:28 GMT"
-
对象都用{}
-
数组都用[]
-
所有的键值对,都用key:value
JSON字符串和JS对象的转化
var user ={ name: "orange", age:3, sex:'女' } //对象转换为json字符串 {"name":"orange","age":3,"sex":"女"} var jsonUser = JSON.stringify(user); //json字符串转化为对象,参数为json字符串 //{name: "orange", age: 3, sex: "女"} var obj=JSON.parse('{"name":"orange","age":3,"sex":"女"}');
var Student = { name: "orange", age: 3, run:function () { console.log(this.name+"run...."); } }; var xiaoming = { name:"xiaoming" }; xiaoming._proto_ = user;
class Student{ constructor(name){ this.name =name; } hello(){ alert('hello') } } var xiaoming = new Student("xiaoming"); var xiaohong = new Student("xiaohong"); xiaoming.hello()
继承
class XiaoStudent extends Student{ constructor(name,grade){ super(name); this.grade = grade; } myGrade(){ alert("我是一名小学生") } }
window
window.alert(1) window.innerHeight 936 window.outerHeight 1040 window.innerWidth 1044 window.outerWidth 1920
Navigator
window.Navigator.name "Navigator" navigator.appName "Netscape" navigator.appVersion "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" navigator.userAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" navigator.platform "Win32"
不建议使用这些属性来判断和编写代码
screen
代表屏幕尺寸
screen.width 1920 screen.height 1080
location
代表当前页面的URL信息
host: "www.baidu.com" href: "https://www.baidu.com/" protocol: "https:" reload: ƒ reload()//刷新网页 //设置新的地址 location.assign('vvvvv.com')
document
document.title "百度一下,你就知道" document.title='mmm' "mmm"
//获取具体的文档树结点节点 <dl id="app"> <dt>java</dt> <dd>javaee</dd> <dd>javaee</dd> </dl> <script> var dl= document.getElementById('app'); </script>
获取cookie
document.cookie
history.back()//后退 history.forward()//前进
浏览器网页就是一个DOM树形结构
-
更新:更新DOM节点
-
遍历DOM节点:得到DOM节点
-
删除:删除一个DOM节点
-
添加:添加一个新的节点
要操作一个DOM节点,就必须要先获得一个DOM节点
获取DOM节点
var h1=document.getElementsByTagName('h1'); var p1=document.getElementById('p1'); var p2 = document.getElementsByClassName('p2'); var father = document.getElementById('father'); var children = father.children; // father.firstChild // father.lastChild
这是原生代码,之后尽量使用jQuery
更新节点
<div id="id1"> </div> <script> var id1 = document.getElementById('id1');
//操作文本 id1.innerText='123'//修改文本的值 "123" id1.innerHTML='<strong>123</strong>'//解析HTML文本标签 "<strong>123</strong>" //操作JS id1.style.color='red'//属性使用,字符串‘’包裹 "red" id1.style.fontSize='12px' "12px" id1.style.padding='2em' "2em"
删除节点
<div id="father"> <h1>标题一</h1> <p id="p1">p1</p> <p class="p2">p2</p> </div> <script> var self=document.getElementById('p1'); var father = p1.parentElement; father.removeChild(p1) </script>
注意:删除多个节点的时候,children是在时刻变化的
插入节点
<p id="js">JavaScript</p> <div id="list"> <p id="se">javase</p> <p id="ee">javaee</p> <p id="me">javame</p> </div> <script> var js=document.getElementById('js'); var list=document.getElementById('list'); list.appendChild(js);//追加到后面 </script>
创建一个新的标签实现插入
<script> var list=document.getElementById('list'); var newP=document.createElement('p');//创建一个p标签 newP.id='newP'; newP.innerText='hello' list.appendChild(newP);
<script> var input_text = document.getElementById('username'); var boy_radio = document.getElementById('boy'); var girl_radio = document.getElementById('girl'); //得到输入框的值 input_text.value //修改输入框的值 input_text.value='123' //对于单选框,多选框等固定的值, boy_radio.value只能取到当前的值 boy_radio.checked;//查看返回的结果,是否为true,如果为true,则被选中 girl_radio.checked=true;//赋值 </script>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--MD5工具类--> <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script> </head> <body> <form action="post"> <p> <span>用户名:</span><input type="text" id="username"> </p> <p> <span>密码:</span><input type="password" id="input-password"> </p> <input type="hidden" id="md5-password" name="password"> <!--绑定时间onclick被点击--> <button type="button" onclick="mm">提交</button> </form> <script> function mm() { var uname= document.getElementById('username'); var pwd=document.getElementById('input-password'); var md5pwd = document.getElementById('md5-password'); //MD5算法 // pwd.value = md5(pwd.value); md5pwd.value=md5(pwd.value); //可以验证判断表单内容,true就是通过提交,false阻止提交 return true; } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--cdn引入--> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> </head> <body> <a href="" id="test-jquery">点我</a> <!-- 公式:$(selector).action --> <script> //选择器就是css的选择器 $('#test-jquery').click(function () { alert('hello') }) </script> </body> </html>
$('p').click();//标签选择器 $('#id1').click()//id选择器 $('.class1').click()//class选择器