随笔分类 - JavaScript
摘要:我知道这个话题网上说法非常多,甚至还有分出什么"Array,Function"之类的阿猫阿狗的类型。今天来整理这个话题的时候,先贴一张MDN官方的说法: 这个分法是对的,也是目前来讲最正确的。一共就七种。即(Number,Boolean,String,Null,Undefiend,Symbol,Ob
阅读全文
摘要:new一个构造函数时具体执行了什么操作? 1.在内存中新建一个空对象; 2.this指向这个内存中的空对象; 3.根据定义的键值和传入的参数,依次给这个空对象添加上键值对; 4.在构造函数语句末尾添加return this,也就是把这个指向内存中刚刚创建的新对象的指针return出去,传址赋值给变量
阅读全文
摘要:一、继承的概念 子类共享父类的数据和方法的行为,就叫继承。 二、E55如何实现继承?探索JavaScript继承的本质 2.1构造函数之间的“复制粘贴” 第一条路是通过构造函数来继承,这可以理解为子类直接复制了父类构造函数的代码,然后按照一定的规矩“粘贴”在自己的构造函数中,为己所用。举个例子: 如
阅读全文
摘要:一、多态的概念 相同的函数作用于不同的对象,会得到不同的结果,这就是多态。 二、如果不用多态,会怎么样? 这里有个浅显易懂的例子,定义一个函数叫makeSound,传入不同的对象,函数体里要写不同的情况处理,比如发现传来的是鸭子对象,就发出“嘎嘎嘎”的声音,发现传来的是狗狗,就发出“汪汪汪”的叫声,
阅读全文
摘要:一、封装的概念 面向对象的类包括两大成员,一种是暴露给外部的接口,另一种是只在类内部才能访问的私有属性。在这个类被实例化成对象后,用户只能通过操作给定的接口来访问该类内部的私有属性,这就被称为面向对象的封装性。 二、ES5如何实现封装 这里只说一种方法,就是通过闭包。 可以看下这个例子,在构造函数(
阅读全文
摘要:操作数组的方法中,分为变异方法和非变异方法。其中,变异方法意味着会改变原数组,而非变异方法则只会返回一个新数组。 变异方法有: push() //数组尾部追加一个元素 pop() //数组尾部弹出一个元素 shift() //数组头部弹出一个元素 unshift() //数组头部插入一个元素 spl
阅读全文
摘要:1.reduce的用法。 reduce是JavaScript中的一个方法,常用于数组求和,接收两个参数,第一个参数为累加函数,第二个参数为初始值,这个初始值是前面那个累加函数的参数。如果不指定初始值,则默认为0;用法如下: 控制台打印结果如图: 注意初始值一定要写上,就算为0也要写上,保证reduc
阅读全文
摘要:switch case是可以加范围判断的,但是语法有少许变化,参数不能写在switch里面,而是写在外面,如:
阅读全文
摘要:首先,这些处理方法可分为三类。 1,只用来处理数字取整问题的:Math.round(),Math.floor(),Math.ceil(); 2,专门用于把字符串转化成数值:parseInt(),parseFloat(); 3, 没有什么卵用的:Number() 下面看看他们各自的用法和区别,逐个分类
阅读全文
摘要:我们都知道在js中,变量分为值类型和引用类型,对于值类型来说,它在赋值是一种传值赋值,即直接原原本本拷贝一份;而对于引用类型(对象、数组、函数)来说,由于体积较大,它们在赋值时是一种传址赋值,也就是说,仅仅把一个指向引用类型的指针复制过去,这是一种浅拷贝;而要真正地拷贝引用类型本身,就要用到深拷贝。
阅读全文
摘要:实现函数如下: 这段代码看似简单,却内蕴玄机,首先利用/ /来将正则表达式围起来,/g表示全局进行匹配,匹配完成后将内容替换成"";便可以消除空格; 而考虑到可能只有头部有空格,或者只有尾部有空格,或者都有空格,所以采用 | (或)来进行逻辑判断; 在这里^代表开始处,$代表结尾处; s代表空格,\
阅读全文
摘要:其实是不会的。“delete只能对对象属性进行操作”的说法是错误的,严谨来说,delete可以对任意变量类型进行操作,只不过只有对对象的属性才能操作成功,对其他变量类型操作失败罢了。 所以这里对b这个字符串进行操作并不会报错,它仍然“尝试着”去进行了删除动作,只不过没有删除成功而已,b还是原来的字符
阅读全文
摘要:event loop这东西,确实把我坑了一把,面试的时候被问到这个问题的时候,我是懵逼的,完全不知道怎么回答,而当我回来查到原来这个听起来如此玄乎又厉害的名字就是异步和单线程那块的知识的时候,我心情又变得很复杂,怪我,不知道它有这么个高级的名字。 其实这玩意相当简单,首先,js是一门单线程的语言,所
阅读全文
摘要:说到模块化,不可否认这已经成为了前端开发的一个共识,而本人在开发中也逐渐接受了模块化这种理念,并且深深滴体会到模块化开发的好处。为啥这么说呢?来看一段简单的代码:(不使用模块化) 这是在未使用模块化之前经常可以见到的一种现象:把一堆js放在body底部,可是你知道吗?这种方式存在两个很大的问题: 1
阅读全文
摘要:之前在看对象的api中for in函数时,有一个地方让我略有疑惑: 为什么是obj[key]而不是obj.key呢?我们在浏览器试一下: 说起来也有点尴尬,原来在for in函数中,得到的key是一个字符串类型,所以只能用obj[key],其实,比如说在这个对象中,obj.x和obj["x"]是完全
阅读全文
摘要:闭包简单来说就是函数中的函数,也可以把它理解为一种现象,就是说一个函数要访问另外一个目标函数内部的变量,就要在目标函数中再定义一个函数(以此来把作用域链往下延长一段,目的就是为了利用js在找自由变量时,会沿着作用域链一级一级往上找的特点),并将这个定义的函数return出来,供外部使用。在实际开发中
阅读全文
摘要:在《JavaScript语言精粹》这本书里,这个“自动插入分号”机制被划入到了JavaScript的毒瘤里面,与之并列的前面的全局变量。 有些时候,不合时宜地插入分号,会导致严重的后果。 比如一个return语句要正确返回一个值,这个值的表达式的开始部分(就算是一个括号也好)必须和return位于同
阅读全文
摘要:在逻辑运算中会发生强制类型转换,这点是大家都很熟悉的,但具体进行了怎样的转换,之前我却有点模糊,对于这个概念今天可以来说一下。 首先是与运算符,从左到右看的时候,如果第一个变量已经可以转换为true,那么就直接输出第二个变量,因为第一个变量已经为true,圆满完成了自身的任务,整体是否为true就看
阅读全文
摘要:上回我们说到ES5的面向对象,以及被大家公认的最佳的寄生组合式继承。时代在进步,在ES6中对于面向对象这个大boss理所应当地进行了一次大改,从原先那种比较长的写法转变为“小清新”写法。我们一起来看一下。 在ES6中是有类这个概念,而且是堂而皇之地有了。 我们来看一串代码: 其实我们用的依然是上回说
阅读全文
摘要:说到面向对象这个破玩意,曾经一度我都处于很懵逼的状态,那么面向对象究竟是什么呢?其实说白了,所谓面向对象,就是基于类这个概念,来实现封装、继承和多态的一种编程思想罢了。今天我们就来说一下这其中继承的问题。 好,先不直接上代码,而是反手来一波文字说明,捋一捋思路。 曾经一段时间因为javascript
阅读全文

浙公网安备 33010602011771号