目录
JS是一门弱类型语言、客户端语言
不需要强制写分号
控制语句
for...in 一般数组对象的遍历,常用for in
JSON
json是格式,不是类型
json是一种轻量级的数据交换格式
使用双引号
JSON 是用于存储和传输数据的格式。
JSON 通常用于服务端向网页传递数据 。
JSON.parse() 用于将一个JSON字符串转换为JavaScript对象
JSON.stringify() Javscript转JSON字符
var a = {"sites":[ {"name":"Runoob", "url":"www.runoob.com"}, {"name":"Google", "url":"www.google.com"}, {"name":"Taobao", "url":"www.taobao.com"} ]}
console.log(JSON.stringify(a));
console.log(JSON.parse(JSON.stringify(a)));
浏览器对象模型
window.location.search 截取地址栏的url (页面之间传参数)
AJAX
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
AJAX 简单来说就是 通过XmlHttpRequest对象向服务器发异步请求,从服务器获得数据,然后用 javascript 来操作DOM更新页面的技术。与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。
增删改查 POST DELETE PUT GET
正则表达式
在代码中中常简写为regex、regexp或RE
使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式
搜索模式可用于文本搜索和文本替换
正则表达式参数可用在以上方法中 (替代字符串参数)。
正则表达式使得搜索功能更加强大(如实例中不区分大小写)。
var patt = /runoob/i
/runoob/i 是一个正则表达式。
runoob 是一个正则表达式主体 (用于检索)。
i 是一个修饰符 (搜索不区分大小写)。
使用字符串方法
search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
正则表达式修饰符
修饰符可以在全局搜索中不区分大小写
正则表达式模式
使用RegExp对象
RegExp 对象是一个预定义了属性和方法的正则表达式对象。
使用test()
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
var patt = /e/;
patt.test("The best things in life are free!");
//true
使用exec()
exec() 方法用于检索字符串中的正则表达式的匹配。
该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
判断数据类型
typeof 返回数据类型包含:number、boolean、symbol、string、object、undefined、function
instanceof 检测的是原型
instanceof 运算符用于检测构造函数(constructor)的 prototype
属性是否出现在某个实例(object)对象的原型链上。
object instanceof constructor
代码创建了一个类型 Car
,以及该类型的对象实例 mycar
. instanceof
运算符表明了这个 mycar
对象既属于 Car
类型,又属于 Object
类型。
JavaScript错误
try测试代码块的错误
catch处理错误
throw创建自定义错误
finally语句在try和catch语句之后,无论是否触发异常,都会执行
try { ... //异常的抛出 }
catch(e) { ... //异常的捕获与处理 }
finally { ... //结束处理 }
let 和 const
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
在 ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量。
let
var x = 10;
// 这里输出 x 为 10
{
let x = 2;
// 这里输出 x 为 2
} // 这里输出 x 为 10
使用 let 关键字声明的全局作用域变量不属于 window 对象
let 关键字定义的变量则不可以在使用后声明,也就是变量需要先声明再使用。
const
声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改
const跟let一样都是块级作用域,都不能和它所在作用域内的其他变量或函数拥有相同的名称
const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的
区别
const
声明的常量必须初始化,而let
声明的变量不用- const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。
闭包
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁
最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
点击li元素生成序列号
var lis = document.querySelectorAll('li');
var ul = document.querySelector("ul");
for (var i = 0; i < lis.length; i++) {
lis[i].addEventListener("click", (function(i){
return function f() {
console.log(i);
}
}) (i))
}
函数表达式和函数声明
//函数声明式
function greeting() {
console.log("123")
}
//函数表达式
var greeting = function() {
console.log("123")
}
区别
1.函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的
如果函数表达式声明的函数有函数名,那么这个函数名就相当于这个函数的一个局部变量,只能在函数内部调用
2.以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用
函数声明整体会被提升到当前作用域的顶部,函数表达式也提升到顶部但是只有其变量名提升
3.函数声明的方法定义的函数并不是真正的声明,它们仅仅可以出现在全局中,或者嵌套在其他的函数中,但是它们不能出现在循环,条件或者try/catch/finally中,而函数表达式可以在任何地方声明