浏览器平台的神。
0.1+0.2 != 0.3的神奇语言
包含ECMAScript(定义语法) dom(把html看做一棵文档树) bom(浏览器对象模型)

使用方法

写在html行内、用script标签、引入js文件。

最基本的语法

//我虽然写var,但你应该用let
var a = 10;
if (a === 10) {
    console.log("yeah");
} else if (a === 15) {
    console.log("?");
} else {
    console.log("??");
}
for (var i=0; i<10; i++) {
    console.log(i);
}

字符串API

会java的基本不用学吧...

var len = str.length
name.toUpperCase() 
name.toLowerCase()
var ch = str.charAt(12);
var idx1 =  str.indexOf("a");
var idx2 = str.lastIndexOf("a");
var str1 = "abcde";
var str2 = str1.replace("cd","XXX");
var str1 = "一,二,三,四,五";
var arr = str1.split(",");

数组

var arr = [1,2,3,4];
//没有类型限制
var arr = new Array(1, "a", false);

相关API

var str = arr.toString();

var arr = [1,2,3,4];
var str = arr.join("-"); /

var arr = [1,2,3,4];
var arrnew = arr.concat(5,6); //变成1 2 3 4 5 6

var arr = ['a','b','c','d','e','f','g','h'];
var arrnew = arr.slice( 2,4 ); //cd

var arr = [1,2,3,4];
arr.reverse();    //不用接值,直接就地修改。

var arr = [4,3,2,1];
arr.sort(func);
//可以传一个函数进去。

数学类API

图片说明
直接Math.sqrt(); 不用new什么。

在这里插入Number的介绍

var n = new Number( 12.345 );
var n1 = n.toFixed(2); // 12.35,固定两位小数,第三位小数四舍五入
console.log( n1 );
var x = new Number( 12.3 );
var n2 = x.toFixed(2); // 12.30,固定两位小数,位数不够,0来补齐
console.log( n2 );

正则

其实正则是语言无关的。

//开头结尾固定
var reg = /^$/
//匹配三位纯数字
var reg = /^\d{1,3}$/
var flag = reg.test(18)

常用正则

图片说明

日期时间

var time = new Date();
console.log( time ); // Tue Jul 14 2020 11:09:46 GMT+0800 (中国标准时间)
var year = time.getFullYear(); // 年份
var month = time.getMonth() + 1; //月份从0开始,11结束,所以国内习惯要+1
var day = time.getDate(); // 几号
var hour = time.getHours(); // 几点
var mm = time.getMinutes(); // 分钟
var s = time.getSeconds(); //秒
var ms = time.getMilliseconds(); // 毫秒, 1000毫秒 = 1秒
var timestr = year+"年"+month+"月"+day+"号 "+hour+"点"+mm+"分"+s+"秒"+ms+"毫秒";
console.log( timestr );

函数

var func = function printLn() {
    console.log("---");
}
func();
printLn();
var func2 = new Function("a", "b", "return a + b")
console.log(func2(1,2))

一些常用的全局函数

isNaN:检查其参数是否是非数字值
eval:用来转换字符串中的运算
encodeURI 与 decodeURI:转码、解码。好像用处也不是特别大...

闭包

指的是在某个函数中访问另一个作用域内的数据。

function test1(){
    var count = 0; //局部变量
    function jia(){
        return count+=1;
    }
    return jia;
}

弹框API

普通弹框 alert();
控制台日志输出 console.log();
页面输出 document.write("<h2>我爱你中国</h2>");
确认框 confirm("确定删除吗?"); //可以获得一个yes 和 no 的框,可以接到bool形式的yes no值进行后续判断
输入框 prompt("请输入姓名:");  //用户可以在里面输入数据

Dom操作

访问

getElementById:通过id属性获得元素节点对象
getElementsByName:通过name属性获得元素节点对象集
getElementsByTagName:通过标签名称获得元素节点对象集

修改

通过访问方法得到一个dom对象之后,可以通过修改innerHTML字段的方法修改HTML,也可以通过修改style字段下的各种属性(obj.style.color obj.style.fontFamily ......)来修改这个dom对象。

添加 删除 替换节点

//添加
var img = document.createElement("img"); // <img>
var divs = document.getElementsByTagName("div");
divs[0].appendChild(img);
//删除
var img = document.getElementById("cat");
img.parentNode.removeChild(img); // 必须通过父节点,才能删除子节点
//替换
var imgold = document.getElementById("cat");
// 通过修改元素的属性,做的替换
var imgnew = document.createElement("img");
imgnew.setAttribute("src","../img/1.jpg");
imgold.parentNode.replaceChild( imgnew, imgold );

事件

窗口事件

仅在 body 和 frameset 元素中有效。
onload 当文档被载入时执行脚本

<body onload="test()">
    <script>
    function test() {
        document.write("哈哈哈哈");
    }
    </script>
</body>

表单事件

仅在表单元素中有效。
onblur 当元素失去焦点时执行脚本
onfocus 当元素获得焦点时执行脚本

<body>
    <script>
        function a() {
            console.log("获得焦点==被激活");
        }
        function b() {
            console.log("失去焦点");
        }
    </script>
    <form action="">
    <p>帐号:<input onfocus="a()" onblur="b()" /></p>
    <p>密码:<input /></p>
    </form>
</body>

鼠标事件

onclick 当鼠标被单击时执行脚本
ondblclick 当鼠标被双击时执行脚本
onmouseout 当鼠标指针移出某元素时执行脚本
onmouseover 当鼠标指针悬停于某元素之上时执行脚本

键盘事件

onkeydown 按下去
onkeyup 弹上来

<script>
    window.onkeydown = function(){
        if(event.keyCode == "13"){ // 回车键
            alert("登录成功!");
        }
    }
    window.onkeyup = function(){
        console.log(event.keyCode); // 按住按键不松手是不会触发的。当松手时,按键回弹则触发
    }
</script>

事件冒泡与事件捕获

假设我有两个div,并且都注册了点击事件。
并且两个div一大一小,大的套小的。
当我点击小的div时,大的div也会触发点击事件。
具体顺序呢?冒泡指从小到大(泡泡就是这样的),捕获指从大到小。
停止冒泡可以在子div里面调用e.stopPropagation();

如何指定要冒泡还是要捕获呢?取决于addEventListener函数最后的参数。最后的参数给true就是捕获。

OOP

JS的OOP是基于原型的。其实现在也支持class了,还是基于class的写法比较方便。

function userinfo(name , age){
    this.name = name;
    this.age = age;
    this.say = function(){
        console.log("大家好,我叫:"+this.name+",我今年"+this.age+"岁了!");
    }
}
var user = new userinfo("詹姆斯",35);
user.say();
var user = {
    username : "孙悟空",
    age : 527,
    say : function(){
        console.log("大家好,我叫:"+ this.username +",我今年"+this.age+"岁了!");
    }
};
user.say();

JSON

var json1 = { username: "吕布", age: 31 };
console.log("姓名:" + json1.username + ",年龄:" + json1.age + "岁");

BOM

浏览器对象模型。

<button onclick="kai()">阿百</button>
<script>
    function kai(){
        window.open("https://www.baidu.com", "百度", "width=500, height=300, left=400");
    }
</script>

屏幕对象

console.log(window.screen.width + "|" + window.screen.height);

location

包含有关当前 URL 的信息,通常用来做页面跳转

<button onclick="test()">测试</button>
<script>
    function test(){
        console.log( "当前页面的URL路径地址:"+ location.href );
        location.reload(); // 重新加载当前页面(刷新)
        location.href = "http://lagou.com"; // 跳转页面
    }
</script>

history

<button onclick="back()">返回</button>
<script>
    function back(){
        //history.go(-1); //上一级页面
        history.back(); // 与go(-1)是等价的
    }
</script>

navigator 浏览器信息

<script>
    var str = "";
    str += "<p>浏览器的代号:"+ navigator.appCodeName +"</p>";
    str += "<p>浏览器的名称:"+ navigator.appName+"</p>";
    str += "<p>浏览器的版本:"+ navigator.appVersion+"</p>";
    str += "<p>硬件平台:"+ navigator.platform+"</p>";
    str += "<p>用户代理:"+ navigator.userAgent +"</p>";
    str += "<p>启用Cookies:"+navigator.cookieEnabled+"</p>";
    document.write(str);
</script>

本地存储

关闭浏览器或标签页才删除数据

localStorage.setItem("name","curry");
localStorage.getItem("name");
localStorage.removeItem("name");


localStorage["a"] = 1;
localStorage.b = 2;
localStorage.setItem("c",3);
// 第一种方式读取
var a = localStorage.a;
console.log(a);
// 第二种方式读取
var b = localStorage["b"];
console.log(b);
// 第三种方式读取
var c = localStorage.getItem("c");
console.log(c);

会话存储

关闭浏览器失效

<button onclick="dian()">点我</button>
<h3 id="result"></h3>
<script>
    function dian(){
    if( sessionStorage.getItem("clickCount") ){
        sessionStorage.setItem("clickCount",
        Number(sessionStorage.getItem("clickCount")) + 1);
    }else{
        sessionStorage.setItem("clickCount", 1);
    }
    document.getElementById("result").innerHTML = "已经点击了" + sessionStorage.getItem("clickCount") +"次!"
}
</script>

计时器

timer = setInterval(func, time);
clearInterval(timer); //停止
setTimeout(func, time); //一次性的定时器