当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

JS中零星知识点

作者:小梦 来源: 网络 时间: 2024-07-17 阅读:

1.null

typeOf  null //object

null是一个空指针,指针是用来指向对象的,因此null的类型返回object

2.undefined

undefined == null //true

undefined 值是派生自null

3.基本类型

var s = 'meituan';s.subString(3); //tuan

3.1简单类型为什么含有方法?

每当读取一个基本类型的时候,后天都会创建一个与之对应的包装类型对象,所以可以调用相应的方法。上述代码过程如下:

  • 创建string类型的一个实例

  • 在实例上调用指定的方法

  • 销毁这个实例

var s1 = new String('meituan');var s2 = s1.subString(3);s1 = null;return s2;

3.2 基本类型和引用类型的不同

主要是生命周期

var s = 'meituan';s.age = 4;console.log(s.age) //undefined

在第二行中,新创建的string对象调用完后立刻被销毁了,所以第三行再次调用时就不存在第二行的对象了。

4.Object.prototype遍历结果为什么显示空?

var list = [];for(var key in Object.name) {    list.push(key);}console.log(list) //[]
// Object.prototype无法遍历的原因Object.getOwnPropertyDescriptor(Object.prototype, 'toString')//Object {value: function, writable: true, enumerable: false, configurable: true},cause:enumerable: false
// 查看不可遍历的Object.prototypeconsole.dir(Object.prototype)

5.valueOf和toString的用法

var a = {    i: 10,    valueOf: function() { return this.i + 30;},    toString: function() { return this.valueOf() + 10;}}alert(aaa > 20) // truealert(+aaa); // 40alert(aaa);// 50

valueOf()主要用于运算符操作,toString()主要用于数据的展示。

调用顺序:

  • 1.如果方法被重写,那么重写的方法优先级最高,直接被调用

  • 2.如果优先级相同,那展示的情况下使用toString,参与操作符运算的时候调用valueOf

6.{}的用法

a)如果{}是在表达式前面,会作为代码块使用

{} + [] // 0equal to+ []

b) 如果放在后面,作为空对象

[] + {} // [object Object]

7.编码—encodeURI encodeURIComponent

var url = 'http://book.2cto.com/201401/39587.html value.jsp'; var a = encodeURI(url); // "http://book.2cto.com/201401/39587.html%20value.jsp" var b = encodeURIComponent(url); //"http%3A%2F%2Fbook.2cto.com%2F201401%2F39587.html%20value.jsp"//二者之间的区别在于编码的范围存在差异,encodeURIComponent的范围更大

与之对应的解码方法是decodeURI、decodeURIComponent

另外escape、unescape已经被ES3废弃掉,不建议使用。

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z.

对整个URI进行解析时,可以使用encodeURI,对URI的部分解析解析时应该使用encodeComponent

前端解析后的参数,传递给后端,后端也有一个类能够解析编码后的参数:URLDecoder http://docs.oracle.com/javase/6/docs/api/java/net/URLDecoder.html

8.正则表达式

  • 全局标志g:会改变regExp的lastIndex值,也就是下一次开始匹配时的起始位置

  • RegExp:拥有一些静态属性,在使用正则时会自动改变这些属性的值,例如:input、lastMatch、lastParen、leftContext、multiline、rightContext,一级对应的$_、$&、$+、$`、$*、$',还有分组属性$1...$9.

  • exec: 得到的是匹配项、各个分组,与match的区别:在全局(g)情况下,match会匹配所有的情况,并且返回的为匹配项,不包含各个匹配组。

  • replace: 这是一个神奇的函数,把正则发挥的淋漓尽致。

var text = 'cat, bat, sat, fat';var result = text.replace('at', 'ond');  // "cond, bat, sat, fat" 只会匹配第一个 //如果希望匹配所有的,就需要使用正则表达式var text = 'cat, bat, sat, fat';var result = text.replace(/at/g, 'ond'); //"cond, bond, sond, fond" //假如还需要引用其中的匹配组呢var text = 'cat, bat, sat, fat';var result = text.replace(/(.at)/g, 'word ($1)'); //"word (cat), word (bat), word (sat), word (fat)" //对匹配项的复杂处理var text = '<div>';text.replace(/[<>]/g, function(mat, index, input) {   if(mat === '<') {      return '&lt;'   } else if(mat === '>') {      return '&gt;'   }}) //"&lt;div&gt;"

9.arguments处理

该对象是函数内的参数对象,是一个类数组对象,但是并不是数组,不具有数组里面的slice、splice等方法,但是有时候需要获取arguments里面的某些参数怎么办呢?比较笨的方法对其进行遍历,另外一种方法就是调用call方法,完成参数获取。

function foo(a,b,c) {    var arg = Array.prototype.slice.call(arguments, 1,3);}

10.createDocumentFragment

用于创建文档片段,可以避免多次与DOM进行交互,进而提高页面的性能。

热点阅读

网友最爱