js基础

声明变量带var和不带var的区别?

在全局作用域中申明变量相当于给全局对象window增加了一个属性名
在全局作用域下,不带var 仅仅给全局对象设置一个新的属性

使用单例模式实现模块化开发

模块化开发:把复杂页面按功能进行划分成几大模块进行开发,这种思想就是模块开发思想

var obj = {
    name:function(){
      ...
    }
}

高级单例模式

基于js高阶编程技巧惰性思想来实现的单例模式

var search = (function(){
    function submit(){}
      return {
            init : function(){
                this.submit();
            }
      }
})();
search.init(); 

面向对象(oop)

面向对象是编程思想

对象、 类、 实例

对象: 编程语言中的对象是一个泛指,万物皆对象
类:对象的具体细分(按照属性或者是特性分为一些类)
实例:某一类中的具体事物。

构造函数设计模式(constructor)

使用构造函数方式,主要是为了创造类和实例的,也就是基于面向对象编程思想来实现一些需要的处理
在js中,当我们使用new xxx()执行函数的时候此时的函数就不是普通的函数了,而是变成一个类,返回的结果叫做当前类的实例,我们这种new xxx执行的方式称之为构造函数设计模式

      function fn(){
          ...
      }
      new fn();

普通函数执行 vs 构造函数执行

普通函数执行:

1、开辟一个新的私有作用域
2、形参赋值
3、变量提升
4、代码自上而下执行
5、栈内存释放或者不释放问题

function fn(num){
    this.num = num; //=> this:window
    var total = null;
          total += num;
      return total; 
}
var f = fn(10); //=> f:10

构造函数执行:

1、开辟一个新的私有作用域
2、形参赋值以及变量提升
3、代码自上而下执行前,浏览器会在当前的作用域中国默认创建一个对象数据类型的值,并且会让当前函数中的this指向创建的这个对象
4、代码自上而下执行this.xxx = xxx 这里操作都是在给创建的这个对象增加属性名和属性值
5、代码执行完成后,即时函数中没有写return,在构造函数模式中:浏览器会默认把创建的对象返回到函数的外面

function Fn(num){
    this.num = num
}
var f = new Fn(10);
    function Fn(){
          var num = 100;
          this.name = 'hyq';
    }
    var f1 = new Fn();
    var f2 = new Fn;
  
    console.log(f1.num); // =>undefined
    console.log(f1.name) //=>hyq

数据类型检测

instanceof 用来检测当前实例是否属于某个类 返回ture/false
typeof 用于检测基本数据类型
object.proptotype.toString.call()

原型链查找机制

实例的_proto_ ==>类.prototype 类的constructor ===>类本身 实例没有constructor
类的_proto_ ==> Object.prototype Object没有_proto_

原型与原型链

所有的函数天生自带一属性 proptotype(对象数据类型的值),存贮着当前类或者实例的公共方法或者属性。
在proptotype对象中存在一个constructor属性,这个属性存储的是整个函数本身
每个类的实例都天生自带一属性_proto_,属性值是当前对象所属类的原型

image.png

hasownproperty

检测当前属性是否属于某个对象或者类的私有属性

obj.hasPubProperty() 检测当前属性书否属于共有

function hasPubProperty(attr,obj){
  return (attr in obj) && (obj.hasOwnProperty(attr) === false)
 }

获取数组中的最大/小值

第一种

sort()先排序

第二种

假设法

var ary = [12,2,3,4,5,778,32,11];
var max = ary[0],
   min = ary[0];
for(var i =1; i < ary.length; i++){
    var item = ary[i];
    item > max ? max = item : null;
    item < min  ? min =  item : null;
 }

第三种

利用Math函数

var ary = [12,2,3,4,5,778,32,11];
 eval('Math.max('+ary.toString()+')');
 eval('Math.min('+ary.toString()+')');

第四种

利用Math函数 / es6展开运算符

var ary = [12,2,3,4,5,778,32,11];
 Math.max.apply(Math,ary);

ajax 简单实现原理

  (function(){
     function ajax(options) {
        var _default = {
            url: null,
            data: null,
            method: 'get',
            dataType: "json",
            async: "true",
            cache: true,
            success: null,
            error: null
        }
        for (var key in options) {
            if (key === 'type') {
                _default.method = options['type'];
            }
            _default[key] = options[key];
        }
        var xhr = new XMLHttpRequest;
        xhr.open(_default.method, _default.url, _default.async);
        xhr.onreadystatechange = function () {
            if (/^(2|3)\d{2}$/.test(xhr.status)) {
                if (xhr.readyState == 4) {
                    var result = xhr.responseText;
                    switch (_default.dataType.toUpperCase()) {
                        case "JSON":
                            result = "JSON" in window ? JSON.parse(result) : eval(result);
                            break;
                        case "XML":
                            result = xhr.responseXML;
                            break;
                    }
                    _default.success && _default.success.call(xhr, result);
                }
                _default.error && _default.error.call(xhr, result);
            }
            return;
        }
        xhr.send(_default.data);
    }
  })()

This指针

  • DOM0级事件 与DOM2级事件中的this指向
  DOM0级绑定事件
    obj.onclick=function(){
        //this ==> obj
  }
   IE6~8下  DOM2级绑定事件
    obj.attachEvent("onclick",function(){
        //this ==> window
  })

正则表达式

  • 主要用于处理字符串的规则。
    1、正则匹配(test())
    2、正则捕获 (exec())字符串支持正则的方法, split(),replace(),match()
    3、正则的元字符和修饰符
* 3.1 '修饰符' (img)
    i(ignoreCase) 忽略大小写
    g(global) 全局匹配
    m(multiline) 多行匹配

* 3.2 量词元字符
    +: 表示前面的元字符可以出现多次
    ?:  出现零到一次
    *:出现零到多次
    {n}: 出现n次
    {n,}出现n到多次
    {n,m}出现n到m次

* 3.3 特殊意义的元字符
    \: 转义字符
    \d: 匹配0-9之间的数字
    \D: 匹配任意一个非0-9之间的数字
    .: 处理 \n以外的其他字符
    \w: 匹配0-9或字母或_之间的字符
    \s: 匹配一个任意空字符
    \b: 匹配一个边界符
    x|y: 匹配x或者y其中的一个
    [a-z]:匹配a到z之间的一个
    [^a-z]:匹配非a到z之间的一个
    (): 匹配分组
    ^: 以什么开始
   $: 以什么结束
   ?: :指匹配不捕获
   ?=:正向预查
   ?! : 负向预查
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 词法结构类型、值和变量 词法结构 JS是一门高端的、动态的、弱类型的编程语言,非常适合面向对象和函数式的编程风格 ...
    寒桥阅读 1,284评论 0 32
  • 15、变量 首先,我们需要了解一下变量的定义: 变量是存储信息的容器。 为什么需要变量呢,不止js里面,程序里面的...
    我就是z阅读 344评论 0 0
  • JS中 我认为设计最出色的便是函数,它几乎接近完美,但是也有些许瑕疵 函数对象 JS中的函数就是对象, 对象是 k...
    人失格阅读 404评论 0 0
  • 你吃过的可能是全网最红的巧克力呢 原创 2017-07-27 Tasty 美食Tasty 「你不能拒绝巧克力 就像...
    美食Tasty阅读 544评论 0 0
  • 跟霞总刚开始交朋友的时候,真的觉得她超级温暖的,思路清晰,善解人意。邀请住一起也是觉得很暖心,感觉像是有了依靠。住...
    章小阅读 427评论 0 0