JS中的原型和原型链讲原型的时候,我们应该先要记住以下几个要点,这几个要点是理解原型的关键: 1、所有的引用类型(数组、函数、对象)可以自由扩展属性(除null以外)。 2、所有的引用类型都有一个’_ _ proto_ _’属性(也叫隐式原型,它是一个普通的对象)。 3、所有的函数都有一个’prototype’属性(这也叫显式原型,它也是一个普通的对象)。 4、所有引用类型,它的’_ _ proto_ _’属性指向它的构造函数的’prototype’属性。 5、当试图得到一个对象的属性时,如果这个对象本身不存在这个属性,那么就会去它的’_ _ proto_ _’属性(也就是它的构造函数的’prototype’属性)中去寻找。 那么要点说完了,我们就根据这些要点来理解原型和原型链。 原型我们先来看一个原型的例子。 12345678910111213141516171819202122//这是一个构造函数function Foo(name,age){ this.name=name; this.age=age;}/*根据要点3,所有的函数都有一个prototype ...
问题一JavaScript 写一个字符串转成驼峰的方法,o_div_style_position转成oDivStylePosotion。 12345var str = 'border-bottom-color';var strRg = str.replace(/\-[a-z]/g, function (params) { return params.charAt(1).toUpperCase();})console.log(strRg); charAt(1)也可以用substr(1)、substring(1)来替代。 toUpperCase()转换成大写字母。 /-[a-z]/g中g表示全文检索,part表示匹配到的字符 replace是字符串的方法,返回经过修改的新字符串。 问题二JavaScript 查找字符串中出现最多字符的个数例如:sdjksfssscfssdd ->字符最多的是s,出现了7次 1234567891011121314151617181920var str = 'sdjksfssscfssdd& ...
(?=a) 代表什么意思! (?=a)非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。 还有四个和这个相近的: (?!a)非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。(?:a)非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。(?<=a)非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。(?<!a)非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。 以上是官方的定义,比较难懂,我用自己的理解翻译了一下: (?=a) 表示我们需要匹配某样东西的前面。(?!a) 表示我们需要不匹配某样东西。(?:a) 表示我们需要匹配某样东西本身。(?<=a) 表示我们需要匹配某样东西的后面。(?<!a) 表示我们需要不匹配某样东西,与(?!a)方向相反。 我的翻译可能还是不太容易理解,我们用代码来解释一下! 12345678910consol ...
![](https://qny.aqingya.cn/img/37073a4791b24b428442d8a82fccc5d3 (1).jpg) 但在开始详细介绍之前,很有必要对ECMAScript 5中的数组方法做一个概述。首先,大多数方法的第一个参数接收一个函数,并且对数组的每个元素(或一些元素)调用一次该函数。如果是稀疏数组,对不存在的元素不调用传递的函数。在大多数情况下,调用提供的函数使用三个参数:数组元素、元素的索引和数组本身。通常,只需要第一个参数值,可以忽略后两个参数。大多数ECMAScript 5数组方法的第一个参数是一个函数,第二个参数是可选的。如果有第二个参数,则调用的函数被看做是第二个参数的方法。也就是说,在调用函数时传递进去的第二个参数作为它的this关键字的值来使用。被调用的函数的返回值非常重要,但是不同的方法处理返回值的方式也不一样。ECMAScript 5中的数组方法都不会修改它们调用的原始数组。当然,传递给这些方法的函数是可以修改这些数组的。 forEach()forEach()方法从头到尾遍历数组,每一个元素调用指定的函数。如上所述,传递的函数作为 ...
稀疏数组概念 在一些后端语言中,如 C,数组内的值通常被分配在一系列连续的内存地址上,但是在 js 中,某些数组内存则不是连续的,所谓稀疏,顾名思义,不连续,存在一些空隙;例如: 123var arr = new Array(3);console.log(arr);// (3) [empty × 3] 通过以上方法创建数组,其中 Array(3) 中的参数 3 表示数组的长度,这个数组就是稀疏的,控制台输出一般带有 empty 字样,或者像下面这样创建数组: 123var arr = [1,,2];console.log(arr);// (3) [1, empty, 2] 因为定义语句中两个逗号之间无字符,没有定义值,同样带有 empty 字样,代表稀疏数组,这里可以把 empty 理解为上面讲到的 空隙; 特点接下来看一下稀疏数组特殊在什么地方,举个例子说明: 12345678910111213141516171819202122232425262728293031var arr1 = [1, 2, 3]; // 正常数组var arr2 = new Array(3); / ...
instanceofinstanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。 语法1object instanceof constructor 参数object :某个实例对象 constructor :某个构造函数 描述instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。 1234567891011121314151617181920212223242526// 定义构造函数function C(){} function D(){} var o = new C();o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototypeo instanceof D; // false,因为 D.prototype 不在 o 的原型链上o instanceof Object; // true,因为 Object.prototype.isPrototypeOf ...
语法 arr.forEach(callback(currentValue [, index [, array]])[, thisArg]) 参数 callback   为数组中每个元素执行的函数,该函数接收一至三个参数:currentValue    数组中正在处理的当前元素。 index (可选)     数组中正在处理的当前元素的索引。 array (可选)   forEach() 方法正在操作的数组。 thisArg (可选)  可选参数。当执行回调函数 callback 时,用作 this 的值。 返回值 undefined。 描述    forEach() 方法按升序为数组中含有效值的每一项执行一次 callback 函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上)。  可依次向 callback 函数传入三个参数:    1、数组当前项的值     ...
   除了for/in循环之外,ECMAScript 5定义了两个用以枚举属性名称的函数。第一个是Object.keys(), 它返回一个数组,这个数组由对象中可枚举的自有属性的名称组成。 语法: Object.keys(obj) 参数 obj    要返回其枚举自身属性的对象。 返回值 一个表示给定对象的所有可枚举属性的字符串数组。 描述 Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。 例子:1234567891011// simple arrayvar arr = ['a', 'b', 'c'];console.log(Object.keys(arr)); // console: ['0', '1', '2']// array like objectvar obj = { 0: 'a ...
index.html 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content= ...
I 封装成方法如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051/* 定义一个函数 addClass() 用来向元素中添加指定的class属性值 参数: obj :要添加class属性值的元素 cn : 套添加的class属性 为字符串 */ function addClass(obj, cn) { if (!hasClass(obj, cn)) { obj.className += " " + cn; } }; /* * 判断一个class中是否含有指定的class属性值 * 参数: obj :要 ...