helloworld
一般内嵌js放在head里或者body的下面
基本语法
js中没有变量类型,所有的变量都是var
条件控制
1 2 3 4 5 6 7 8 var score = 1 ;if (score > 60 ){ alert("true" ); }else if (score < 40 ){ alert("false" ); }else { alert("???" ); }
js严格区分大小写
for循环类似python语法
js调试方式
使用浏览器的控制台
console.log(score)
打印变量
使用sources栏,可以打断点调试,刷新页面可以开始进行调试
数据类型
数值、文本、图形、音频、视频 etc.
js不区分小数和整数
比较运算符
注意===
才是等于,表示类型一样值也要一样才行。
NaN与所有的数值都不想等,包括自己,只能通过isNaN(NaN)
来判断。
js中也存在浮点数的精度问题
Math.abs(1/3-(1-2/3))<0.00000001
数组
元素不需要类型一样
1 var arr = [1 ,2 ,3 ,"asdf" ,null , true ];
数组越界会提示undefined
对象
对象用大括号表示,类似于python里的字典
可以使用delete person.name
删除对象的属性。或者可以通过赋值的方式新建方法。
'toString' in person
可以判断是否在自己或父类中有这个方法
Map和Set
1 2 3 4 var map = new Map ([['a' ,1 ],['b' ,2 ],['c' ,3 ]]);var name = map.get('a' ); map.set('dddd' ,13456 ); map.delete("a" );
1 2 3 4 var set = new Set([2,3,1,1,1]);set .add(4);set .delete(1);// Set是无序不重复的集合
iterator
可以打印下标
1 2 3 4 var arr = [3 ,4 ,5 ];for (var x of arr){ console .log(x); }
遍历map的时候只能用for … of
假如只需要打印数组的值则使用 for … in
严格检查模式
ES6中局部变量使用let i = 1;
来定义 。
'use strict';
放在第一行
函数及面向对象
定义函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 function abs (x ) { if (typeof x !== 'number' ){ throw 'Not a Number' ; } if (x>=0 ){ return x; } else { return -x; } } var abs = function (x ) { if (typeof x !== 'number' ){ throw 'Not a Number' ; } if (x>=0 ){ return x; } else { return -x; } }
arguments
arguments是传递进来的所有参数,是一个数组。
rest
rest是除了已经定义的参数之外的所有参数。
1 2 3 4 5 function f (a,b,...rest ) { console .log(a); console .log(b); console .log(rest); }
变量的作用域
和一般语言没啥区别
js执行引擎自动提升变量的声明但是不提升变量的赋值。
全局对象window
1 2 3 var x = 'aaa' ;alert(x); alert(window .x);
alert()本身也是一个window的方法
由于所有的全局变量都是绑定在window上因此容易出现冲突,为了规避冲突,我们可以按照如下方式
1 2 3 4 5 6 7 8 var GlobeVariables = {};GlobeVariables.name = 'gv' ; GlobeVariables.add = function (a, b ) { return a+b; }
局部作用域
1 2 3 4 5 6 function a ( ) { for (var i=0 ;i<100 ;i++){ console .log(i); } console .log(i+1 ); }
使用let关键字,可以将变量变为局部有效
1 2 3 4 5 6 function a ( ) { for (let i=0 ;i<100 ;i++){ console .log(i); } console .log(i+1 ); }
const
可以定义常量
方法
方法就是将函数放在对象里面
this
始终指向调用它的那个东西
1 2 3 4 5 6 7 8 9 10 11 12 function getAge ( ) { var now = new Date ().getFullYear(); return now - this .birth; } var tmp = { name: 'aaa' , birth: 2000 , age: getAge }; getAge.apply(tmp, []);
时间戳指的是从1970/1/1开始到现在的毫秒数
面向对象
使用原型来作为类似父类的东西
1 2 3 4 5 6 7 8 9 10 11 12 13 var Student = { name: "asdf" , age: 5 , run: function ( ) { console .log(this .name + "run" ); } }; var xiaoming = { name: "xiaoming" }; xiaoming.__proto__ = Student; xiaoming.run();
也可以使用class继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Student { constructor (name){ this .name = name; } run(){ console .log(this .name + "run" ); } }; var xiaoming = new Student("xiaoming" );class primaryStudent extends Student { constructor (name, grade){ this .name = name; this .grade = grade; } myGrade(){ console .log(this .grade + "grade" ); } };
原型链
操作BOM对象
BOM:浏览器对象模型
window
window代表浏览器窗口
Navigator
封装了浏览器的信息,例如appName、appVersion、userAgent、platform。但是大多数时候不会使用该对象,因为该对象会被人为修改。
screen
代表了屏幕的尺寸
1 2 screen.width screen.height
location
location 代表当前页面的URL信息。可以通过location来跳转网页。
1 2 location.reload(); location.assign('https://www.baidu.com/' );
document
document代表当前的页面。
1 2 document .title = 'aaa' ; document .cookie;
获得节点
1 2 3 4 5 6 7 8 9 <dl id ="app" > <dt > Java</dt > <dd > JavaSE</dd > <dd > JavaEE</dd > </dl > <script > var dl = document .getElementById('app' ); </script >
history
history代表浏览器的历史记录
1 2 history.back(); history.forward();
操作DOM对象
DOM: 文档对象模型
浏览器网页就是一个DOM树形结构,我们可以通过操作这些节点的方式去更新改变网页的样式
1 2 3 var a = document .getElementById('aaa' );var childrens = a.children;
修改节点:需要对节点的属性进行赋值
删除节点需要先获取父节点,然后利用该节点删除子节点。注意在删除多个节点的时候children是会改变的。
新增节点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <p id ="js" > JavaScript</p > <div id ="list" > <p id ="SE" > JavaSE</p > <p id ="EE" > JavaEE</p > </div > <script > var js = document .getElementByID("js" ); var list = document .getElementByID("list" ); list.appendChild(js); var np = new document .createELement('p' ); np.id = 'np' ; np.innerText = 'Hello' ; var ee = document .getElementById("EE" ); list.insertBefore(np, ee); </script >
CSS3选择器
选择器用来选择页面上的某一个或者某一类元素
基本选择器
标签选择器(对h1,h2之类的标签有用)、类选择器(可以在标签中加class属性)、id选择器(id需要全局唯一)
层次选择器
可以选择某个标签后面的所有指定元素
1 2 3 body p { background : red; }
可以选择向量的一层的指定元素
1 2 3 body >p { background : red; }
可以选择向下一个的同层节点,,下面的active是类名
1 2 3 .active + p { background : red; }
可以选择向下的所有同层节点
1 2 3 .active ~p { background : red; }
结构伪类选择器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ul li :first-child { background : red; } ul li :last-child { background : red; } p :nth-child(2) { background : red; } p :nth-of-type(2) { background : red; }
属性选择器
=是绝对等于
*=是包含关系
^=以。。。开头
操作表单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > </head > <body > <form method ="post" > <label for ="username" > username:</label > <input type ="text" id ="username" > </form > <script > let input_text = document .getElementById("username" ); </script > </body > </html >
在console中使用,如下指令获得它的值
对于多选框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > </head > <body > <form method ="post" > <label > female <input type ="radio" name ="sex" value ="female" > </label > <label > male <input type ="radio" name ="sex" value ="male" > </label > </form > <script > let sex_value = document .getElementsByName("sex" ); </script > </body > </html >
form中的actioin可以控制提交表单之后跳转到哪里
提交表单
使用md5进行加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > <script src ="js/md5.min.js" > </script > </head > <body > <form method ="post" > <label for ="username" > username:</label > <input type ="text" name ="username" id ="username" > <label for ="password" > password:</label > <input type ="password" name ="password" id ="password" > <button type ="submit" onclick ="md5_check()" > submit</button > </form > <script > let md5_check = function ( ) { let pwd = document .getElementById("password" ); pwd.value = md5(pwd.value); return true ; } </script > </body > </html >
这里使用的md5算法在https://github.com/blueimp/JavaScript-MD5#requirements
jQuery
可以从官网上下载,也可以使用在线的CDN
jQuery的使用方法
具体操作查jQuery文档