本文最后更新于 128 天前,其中的信息可能已经有所发展或是发生改变。
JavaScript 是一种具有面向对象的、解释型的、基于对象和事件驱动的、跨平台的、弱类型的程序设计语言
ECMAScript 是规则,JavaScript 是对规则的体现
严格区分大小写,由英文、数字、下划线、$组成,推荐使用驼峰命名法,不能使用保留字和关键字,见名知意,名字不能重复
当页面加载完成后再执行
基本数据类型有:Number、String、Boolean、Undefined、Null;
复合数据类型有:Object(object、array、function)
null 表示值为空,但是为 object 类型
undefined 表示变量没有初始化
算术运算符 + – * / % ++ —
赋值运算符 = += -= *= /=
比较运算符 > >= < <= == != === !==
逻辑运算符是与 &&,或 ||, 非 !
三目运算符 // 条件 ? 语句一 : 语句二 如果条件成立,执行 ? 后面语句,不成立执行:后面的语句
a=11,b=10
==值一样,类型可以不一样
===值一样,类型一样
false ,因为小数相加会有一点偏差
typeof Number(undefined));//NaN
typeof Number([1,2]));//NaN
typeof Number({}));//NaN
typeof Number(10abc));//NaN
Number() String() parseInt()
console.log(1+‘2’);
console.log(2-true);
function getStyle(obj, attr) { //obj 表示元素 attr 表示属性
if (obj.currentStyle) {
return obj.currentStyle[attr]// ie 浏览器
} else {
return getComputedStyle(obj)[attr]// 标准浏览器
}
}
作用域链是 JS 的查找机制,从当前作用域查找,若没有则向上一级作用域查找,一直到最外层,如果都查找不到则返回 is not define
var x = 1, y = z = 0;
function add(n) {
n = n + 1;
};
y = add(x);
function add(n) {
n = n + 3;
};
z = add(x);
console.log(x, y, z);
结果: undefined undefined
如下:“1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs”
var str = '1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs';
// 去重
var newstr = ;
for (var i = 0; i < str.length; i++) {
var s = str[i];
if (newstr.indexOf(s) == -1) {
newstr += (str[i])
}
}
console.log(newstr);
// 去除特殊字符
var strs = newstr.replace(&, )
console.log(strs); //123fd4sa5rg
// 排序
var str1 = '';
var str2 = '';
for (var i = 0; i < strs.length; i++) {
if (strs.charCodeAt(i) < 65) {
str1 += strs[i]
} else {
str2 += strs[i]
}
}
console.log(str1 + str2); // 12345fdsarg
var str=“abcdefg”
str.substring(3,6)//包括 3 不包括 6
有这样一个url:http://item.taobo.com/item.html?a=1&b=2&c=&d=xxx&e, 请写一段 js 程序提取 url 中各个 get 参数 ( 参数名和参数个数不确定 ),将其 key-value形式返回到一个 json 结构中,如 {a:“1”,b:“2”,c:“”,d:“xxx”,e:undefined}
var str = url:http://item.taobo.com/item.html?a=1&b=2&c=&d=xxx&e;
var arr1 = str.split(?)[1]
var arr2 = arr1.split(&)
var obj = {};
for (var i = 0; i < arr2.length; i++) {
var arr = arr2[i]
var pro = arr[0]
var len = arr.substring(1)
if (len == =) {
len =
} if (len == ) {
len = undefined
}
len = len.replace(/[=]/, )
obj[pro] = len;
}
console.log(obj)
// {a: 1, b: 2, c: , d: xxx, e: undefined}
var str = '1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs';
// 1、去重
var newstr = ;
for (var i = 0; i < str.length; i++) {
var s = str[i];
if (newstr.indexOf(s) == -1) {
// indexOf(str[,index]) 该方法返回某个指定的字符串值在字符串中首次出现的位置。index 是可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1
newstr += (str[i])
}
}
console.log(newstr);
// 2.去除特殊字符
var w = newstr.replace(&, )
console.log(w);//123fd4sa5rg
//3.排序
var str1 = '';
var str2 = '';
for (var i = 0; i < w.length; i++) {
if (w.charCodeAt(i) < 65) {
str1 += w[i]
} else {
str2 += w[i]
}
}
console.log(str1 + str2);
// console.log(str2);
var str = asddfssssaasswef;
var obj = {};
//遍历字符串,将出现的字符存入到数组中
for (var i = 0; i < str.length; i++) {
if (!obj[str.charAt(i)]) {
obj[str.charAt(i)] = 1;
} else {
obj[str.charAt(i)]++;
}
}
console.log(obj);
var max = 0;
var charmax;
//遍历数组,找出出现最多的字母出现的次数
for (var key in obj) {
if (obj[key] > max) {
max = obj[key];
charmax = key;
}
}
console.log(出现最多的字符是 + charmax + ,出现了 + max + 次);
var arr = [1, 3, 5, 2, 3, 3, 5, 6, 2, 3, 4, 6, 3, 3, 5, 2];
//原理: 先找相邻的两个元素 做相等比较 如果有相等的值,保留前者,删除后者,下标调整
//数组的第一个元素
for (var i = 0; i < arr.length; i++) { // 控制所有的循环遍数
//在循环一遍
for (var j = i + 1; j < arr.length; j++) {
//相等比较
if (arr[i] == arr[j]) {
//删除 splice 一个一个删除
arr.splice(j, 1);
//下标减少
j--;
}
}
}
console.log(arr);
原例子相当于[parseInt(1,0),parseInt(2,1),parseInt(3,2)]//即 10 进制 1 转为 10 进制,(1 进制 2 转为 10 进制,2 进制 3 转为 10 进制)不存在
因此输出:[1, NaN, NaN]
var arr = [8, 23, 1, 43, 12, 56, 13, 66]
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);
Window 对象表示浏览器中打开的窗口。 document 对象表示给定浏览器窗口中的 HTML 文档
用?分割 search ?q=javascript 返回 URL 的查询字符串
IE 的是冒泡流,而火狐同时支持冒泡流和捕获流
普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的,而事件绑定(addEventListener)方式添加事件可以添加多个。
btn.addEventListener(click,hello1); fuction hello1(){} btn.addEventListener(click,hello2); fuction hello2(){}
var ul = document.getElementsByTagName('ul')[0]
for (var i = 0; i < 10000; i++) {
var li = document.createElement('li');
li.innerHTML = i;
ul.appendChild(li);
}
ul.onclick = function (ev) {
var objevent = window.event || ev
var target = objevent.target || objevent.srcElement;
target.style.background = red;
}
let reg = /^[0-9a-z]\w+@[a-z0-9]+\.(com|cn|edu|net|org|gov)$/i // \w 匹配字母和数字及_
let str = "123ase@qq.com"
console.log(reg.test(str))
var str = fdf er re545 6565 2fdfd
// 去除字符串内所有的空格
str = str.replace(/\s*/g,);// *匹配 0 个或任意多个
let reg = /^[a-zA-Z]\w{4,19}$/
let str = "121asas12ASD"
console.log(reg.test(str))
function getcookie(key) {
var arr = document.cookie.split(';');
for (var i = 0; i < arr.length; i++) {
var str = arr[i].split('=');
if (str[0] == key || str[0] == ' ' + key) {
return str[1];
}
}
return -1;
}
具体见对象进阶
具体见对象进阶
具体见对象进阶
function Dog() {
this.wow = function () {
alert(\'wow\');
}
this.yelp = function () {
this.wow();
}
}
小芒和小贤一样原来也有一条可爱的狗,可是突然有一点疯了 (MadDog), 一看到人就会每隔半秒叫一声 (wow) 地不停叫唤 (yelp)。请根据描述,按示例形式用代码来实现。( 继承,原型,setInterval);
function MadDog() {
this.yelp = function() {
var self = this;
setInterval(function() {
self.wow();
}, 500);
};
}
MadDog.prototype = new Dog();
//for test
var dog = new Dog();
dog.yelp();
var madDog = new MadDog();
madDog.yelp();
User = function () { }
User.prototype = {
id: ””,
name: ””,
getId: function () { return this.id },
setId: function (id) { this.id = id },
getName: function () { return this.name },
setName: function (name) { this.name = name }
}
var User = function() {
var id = id;
var name = name;
this.__proto__ = {
getId: function() {
return id;
},
setId: function(newid) {
id = newid;
},
getName: function() {
return name;
},
setName: function(newname) {
name = newname;
}
}
}
var admin = new User();
admin.setId(1);
admin.setName(liming);
console.log(admin.name, admin.getName()); //undefined,liming
console.log(mul(2)(3)(4)) //24
console.log(mul(4)(3)(4)) //48
function mul (x) {
return function (y) {
return function (z) {
return x * y * z;
};
};
}
function ajax(url, data, method, success) {
// 异步对象
var ajax = new XMLHttpRequest();
// get 跟 post 需要分别写不同的代码
if (method == 'get') {
if (data) {// 如果有值
url += '?' + data;
}
ajax.open(method, url);// 设置 方法 以及 url
ajax.send(); // send 即可
} else {
ajax.open(method, url);
// 需要设置请求报文
ajax.setRequestHeader(Content-type,
application/x-www-form-urlencoded)
// 判断 data send 发送数据
if (data) {
ajax.send(data); // 如果有值 从 send 发送
} else {
ajax.send();// 没有值 直接发送即可
}
}
// 注册事件
ajax.onreadystatechange = function () {
// 在事件中 获取数据 并修改界面显示
if (ajax.readyState == 4 && ajax.status == 200) {
success(ajax.responseText);
}
}
}
// 获取本地数据
ajax('bendi.txt', , get, function (res) {
console.log(res);
})
post 方式需要设置请求报文
ajax.open(method,url);
ajax.setRequestHeader(Content-type,application/x-www-form-urlencoded)
var json = eval( \'(\' + date + \')\' );
var json2 = JSON.parse( date )