js小记

平时遇到的js一些方法,或者是面试题,又或者总结之类的。。

javascript有哪些方法定义对象

对象字面量: var obj = {};
构造函数: var obj = new Object();
Object.create(): var obj = Object.create(Object.prototype);

判断对象是否含有某个属性(in 和 hasOwnProperty区别)

function car(){this.name='sbx';this.age="1234"}
var car1=new car()
car.prototype.sex="nv"
car1.constructor//car(){this.name='sbx';this.age="1234"}
car1.hasOwnProperty("name")//true
car1.hasOwnProperty("sex")//false
"name" in car1//true
"sex" in car1//true

判断某个属性是否存在与某个对象中,可以通过in运算符,hasOwnProperty()和propertyIsEnumerable()方法来完成.
in运算符,如果对象的自有属性或继承属性中包含这个属性,则返回true.
对象的hasOwnProperty()方法用来检测给定的名字是否是对象的自有属性.
propertyIsEnumerable()是hasOwnProperty()的增强版,只有检测到时自有属性且这个属性的可枚举性为true时才能返回true.

indexOf()

stringObject.indexOf(searchvalue,fromindex)

该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。
如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。

Math

  • Math.random() 0.0-1.0 随机数
  • Math.ceil() 向上取整
  • Math.floor() 一律舍去 仅保留整数
  • Math.round() 进行四舍五入

数组转字符串

需要将数组元素用某个字符连接成字符串,示例代码如下:

var a, b;
a = new Array(0,1,2,3,4);
b = a.join("-");

字符串转数组

实现方法为将字符串按某个字符切割成若干个字符串,并以数组形式返回,示例代码如下:

var s = "abc,abcd,aaa";
ss = s.split(",");// 在每个逗号(,)处进行分解。

判断一个元素是否是数组

// 这里提供两种js方法。返回true则是数组。

var array = new Array("1", "2", "3", "4", "5");
$.isArray(array)
alert(array instanceof Array);
alert(array.constructor == Array);
// 较为严谨并且通用的方法:
function isArray(object){
return object && typeof object==='object' &&
Array == object.constructor;
}

toArray原生写法

toArray:function(){
Array.prototype.slice.call(this)
}
//$("div")返回的是jQuery对象 jQuery.toArray();

Array.prototype.slice.call(arguments)

看一下call的使用

var a = function(){
console.log(this); // 'littledu'
console.log(typeof this); // Object
console.log(this instanceof String); // true
}
a.call('littledu');

可以看到函数a中的this指向call传入的参数
到这里,基本就差不多了,我们可以大胆猜一下slice的内部实现,如下:

Array.prototype.slice = function(start,end){
var result = new Array();
start = start || 0;
end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键
for(var i = start; i < end; i++){
result.push(this[i]);
}
return result;
}

用闭包随机生成id

images

click和onclick

click()方法的主要作用是触发调用click方法元素onclick事件。

<script type="text/javascript">
$(function(){
$("#btn3").click(function(){
alert("aa");
});
});
function change(){
alert("bb");
}
</script>
<button id="btn3" onclick="change()">dd</button>
//弹出bb 然后是aa

getAttribute()和setAttribute()兼容性问题

getAttribute()和setAttribute()在设置或者获取某些属性的时候,会存在一些兼容性问题,那么哪些属性会出现问题呢?
-1.class
-2.for
-3.cellspacing
-4.cellpadding
-5.tabindex
-6.readonly
-7.maxlength
-8.rowspan
-9.colspan
-10.usemap
-11.frameborder
-12.contenteditable
-13.style

<div id="idHeader" class="class-header" title="kingwell" status="1"></div>
<label id="forUserName" for="userName" title="kingwell" status="1"></label>
$(function(){
var el = document.getElementById("idHeader");
//alert(el.getAttribute("id"));//ie6,7正常
//alert(el.id);//ie6,7正常
alert(el.getAttribute("class"));//其他正常,ie6.7不正常
alert(el.getAttribute("className"));//其他不正常,ie6,7正常
//alert(jQuery.valHooks.button.get(el,"class"))//用于解决ie6,7下情况
//alert(el.getAttribute("status"))//ie6,7正常
var elfor = document.getElementById("forUserName");
alert(elfor.getAttribute("for"))//其他正常,ie6.7不正常
alert(elfor.getAttribute("htmlFor"))//ie6,7正常 其他不正常
//alert(jQuery.valHooks.button.get(el,"for"))//ie6,7均不正常
//alert(jQuery.attrHooks.contenteditable.get(el,"for"))
})
sunbaixin wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!