JS
数据类型
JS 数据类型 String Bollean Number Symbol Object undefined Null
原始数据类型验证:
typeof 会得到 7 中类型 String Bollean Number Symbol Object undefined Null ;
symbol 是 Es6 中新增数据类型, 用于解决属性名冲突. 同样 symbol 不相等.
typeof null 等于 object
引用类型数据验证:
instanceof 验证某个变量是否是某个对象的实例 只能对 typeof 结果是 object 验证
- var obj={
- };obj instanceof Object //true
- var str="string" str instanceof String //false
- constructor
- // 当函数被定义时 会添加 prototype 原型, 然后在 prototype 上添加 constructor 属性, 并指向此函数. 当函数成了构造函数时. 构造函数上的 constructor 传递到 了实例对象上.
- function F(){
- }; var f = new F();f.constructor==F//true
- // 当 F 作为构造函数时 F 身上的 constructor 就遗传到了新的对象上 f . 从原型链来说, 构造函数 F 就是 f 的类型.
- /**null 和 undefined 是无效对象不能使用 constructor 来验证; constructor 不稳定, 当重写 prototype 的时候, 原有的引用会丢失, constructo 会默认为 Object*/
- function F(){
- };F.prototype={
- };var f = new F();f.constructor==F//false
- // 因为 F 原型被重新赋值了 {
- };{
- } 是 Object 的字面量. 因此 Object 的 constructor 会传给{
- }; 因此, 为了规范开发, 在重写对象原型时一般都需要重新给 constructor 赋值, 以保证对象实例的类型不被篡改
- toString
- Object.prototype.toString.call('') ; // [object String]
- Object.prototype.toString.call(1) ; // [object Number]
- Object.prototype.toString.call(true) ; // [object Boolean]
- Object.prototype.toString.call(Symbol()); //[object Symbol]
- Object.prototype.toString.call(undefined) ; // [object Undefined]
- Object.prototype.toString.call(null) ; // [object Null]
- Object.prototype.toString.call(new Function()) ; // [object Function]
- Object.prototype.toString.call(new Date()) ; // [object Date]
- Object.prototype.toString.call([]) ; // [object Array]
- Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
- Object.prototype.toString.call(new Error()) ; // [object Error]
- Object.prototype.toString.call(document) ; // [object htmlDocument]
- Object.prototype.toString.call(Windows) ; //[object global] Windows 是全局对象 global 的引用
原型链
所有的对象都有一个 proto 属性, 属性值是一个普通的对象.
prototype 属性, 属性值也是有一个普通的对象.
所有的引用类型他的 proto 属性值指向他构造函数的 prototype 的属性值.
当一个实例对象想得到某个属性, 而他本身没有这个属性, 他就会通过 proto(即他的 prototype 原型)去找. 这样的链式结构叫做原型链. Object 的原型是 null
ES6
let
存在暂存性死区域; 不能在定义之前使用. 不能重复定义变量. 有块级作用域;
const
常量. 基本类型值不允许修改. 对于引用类型保存的是一个内存地址. Object.freeze()可以将对象冻结不可修改
箭头函数
没有 arguments this 和外部一致, 本身不绑定 this
循环
for in 数组 JSON 都可以循环
for of 只能循环数组
map 映射 返回新数组
filter 过滤 返回是 true 的值
some 某些只要为 true 就返回 然后就不执行了
every 每一项都必须为 true
indexOf 是否包含有
lastIndexOf 从尾部开始找是否有
Object.keys()
获取对象所有的属性返回结果是个数组
- var obj = {
- 'a':'123','b':'345'
- };
- console.log(Object.keys(obj)); //['a','b']
- Object.create()
Parmas 原型对象 属性配置
创建对象 Object.create(proto,propertiesObject);
Object.create(null)和 new Object()的区别: 两者都是创建空对象, 但是 new 创建出的空对象会绑定 Object 的 prototype 原型对象, 但是 Object.create(null)的空对象是没有任何属性的
this
this 永远指向最后一次调用他的对象;
- function fn(){
- console.log(this)// this Windows
- }
- var obj={
- fn:function(){
- console.log(this)
- }
- }
- obj.fn()//this obj
- var fnc=obj.fn;
- fnc()// this Windows
普通函数中 this 指向 Windows;(严格模式下是 undefined);
call & apply 功能一样
参数不同 call(thisObj,obj);apply(thisObje,[arrList]);
构造函数中的 this 与被创建的对象绑定;
bind(obj,arg); 使用 bind 绑定 this 不管函数怎么调用都指向原来 bind 绑定的那个 this.
作用域和闭包
- var a;
- function a(){
- }
- console.log(a) //function a(){
- };
- var a=1;
- function a(){
- }
- console.log(a) // 1
- // 函数优先级比变量高. 如果变量没有赋值 就是函数 a
- http
- http
来源: http://www.qdfuns.com/note/51205/db12ea2a5db1bec5ab6ef98e647fb145.html