您现在的位置: 万盛学电脑网 >> 程序编程 >> 脚本专题 >> javascript >> 正文

js+jquery常用知识点汇总

作者:佚名    责任编辑:admin    更新时间:2022-06-22

 本文主要介绍了jquery源码中常见的知识点以及javascript中原型链常见的知识点,非常的全面,这里推荐给小伙伴们。

   

一、jquery源码中常见的知识点

  1.string,number类型转换的快捷方法

 

复制代码 代码如下:
// @param s为字符串,n为数字
function fn(obj){
//转换为String类型
var s = obj +"";
//转换为number类型
var n = +obj;
}

 

  分享一个面试例子:

//加会将其后面自动转换成字符串
"64"+4="644"
//减会将其自动转换成数字
"64"-4=60

  2.bool类型转换

  !!obj,将其强制转换为bool类型

 

复制代码 代码如下:
alert(!!0) //结果为false
alert(!!"33dd") //结果为true

 

  !obj,取相反的bool类型

 

复制代码 代码如下:
alert(!0) //结果为true
alert(!"222333") //结果为false

 

  3.=== 与 ==区别

  === 是严格相等,不会进行类型转换,而 == 是不严格相等,会进行类型转换。有些js的书中,建议开发人员永远不要用 == 或者 != 。

  但是jquery源码中,有用到“==”或者“!=”的情况 —— 判断 undefined 和 null 的时候。

 

复制代码 代码如下:
//这里的判断,将obj是null,obj是undefined都排除在外了
if(obj != null){
}

 

  4.检测obj是否为window对象

 

复制代码 代码如下:
//null == window.null为true
function isWindow(obj){
return obj != null && obj == window.obj;
}

 

  5.|| 与 && 用法技巧

 

复制代码 代码如下:
//例 var aa=5; name = aa || {} ; alert(name) 则name为55
this.name = name || {} //如果name值存在,则值为name,反之为{}
//例 var aa=5; name = aa && {} ; alert(name) 则name为{},因为aa为5,不为0则为真
this.name = bool && [] //如果bool为true,则值为[],反之则为bool

 

  经典实例:

 

复制代码 代码如下:
( window.foo || ( window.foo = "bar" ) );
alert(window.foo); //弹出 bar
// 为什么最后的结果是bar呢,其实可以看成是 undefined || bar 出来的结果肯定是bar

 

  6.setTimeout(fn,0)与setTimeout(fn)区别

  setTimeout(fn,0)与setTimeout(fn)都是延迟执行,但是setTimeout(fn)比setTimeout(fn,0)延迟时间还要长,例

 

复制代码 代码如下:
function fn(){
var data = new Date();
for(var i=0;i<=1000;i++){
if(i==1000){
console.log("fn="+data.getTime());
}
}
}
function fn1(){
var data = new Date();
for(var i=0;i<=1000;i++){
if(i==1000){
console.log("fn1="+data.getTime());
}
}
}
setTimeout(fn,0),
setTimeout(fn1);

 

  结果:

  7.判断是否为数值

 

复制代码 代码如下:
function isNumeric(obj){
return !isNaN(parseFloat(obj)) && isFinite(obj);
}

 

  8.判断是否为空对象

 

复制代码 代码如下:
function isEmptyObject(){
var name;
//遍历不是空对象返回
for (name in obj) {
return false;
}
return true;
}

 

  9.检测对象类型

  检测obj对象类型,返回类型,通过Object.prototype.toString()来判断类型,但是ie低版本兼容性有问题,因此采用{}.toString来监测,返回为[object Array],[object Object],[object Function]

 

复制代码 代码如下:
// 类型判断
function isType(type){
return function(o){
return Object.prototype.toString.call(o) === '[object ' + type + ']';
}
}
var isString = isType(“String”);
var isObject = isType("Object");
var isArray = isType("Array");
isString("I'm Barret Lee.");
isArray([1,2,3]);
isObject({});

 

  10.jquery里的去除空格trim妙用

 

复制代码 代码如下:
//相当于if (String.prototype.trim && “uFEFFxA0″.trim() !== “”)高级的浏览器已经支持原生的String的trim方法,但是pFan还为了避免它没法解析全角空白,所以加多了一个判断:”uFEFFxA0″.trim() !== “”
vart core_version = "1.0",core_trim = core_version.trim;
function trim(){
core_trim && !core_trim.call("uFEFFxA0") ?
function (text) {
return text == null ?
"" :
core_trim.call(text); //这里按我的理解应该为" ".trim.call(text),有点不明白转换为"1.1.0".trim.call(text)
} :

// 高级的浏览器已经支持原生的String的trim方法,如果浏览器不支持则采用
function (text) {
var whitespace = "[x20trnf]",
rtrim = new RegExp("^" + whitespace + "+|((?:^|[^])(?:.)*)" + whitespace + "+$", "g");
return text == null ?
"" :
(text + "").replace(rtrim, "");
},
//nodeName函数是获取dom节点的节点名字或者判断其名字跟传入参数是否匹配
nodeName: function(elem,name){
//IE下,DOM节点的nodeName是大写的,例如DIV
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
}
}

 

  11.jquery中检测数组或者类数组中是否含存在传入的值

 

复制代码 代码如下:
/**
检查数组中是否存在传入的值,如果存在就返回值所在的位置,如果不存在就返回-1。
*elem 规定需检索的值。
*arr 数组
*i 可选的整数参数。规定在数组中开始检索的位置。它的合法取值是 0 到 arr.length - 1。如省略该参数,则将从数组首元素开始检索。
*/
function inArray(elem, arr, i){
var len;
if (arr) {
//如果浏览器支持Array拥有indexOf方法
if ([].indexOf) {
return [].indexOf.call(arr, elem, i);
}
len = arr.length;
//当i为负数的时候,从数组后边len+i的位置开始索引
//理解这个分成两个部分i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0;,i=i为true,执行(i < 0 ? Math.max(0, len + i) : i),反正执行i=0
i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
for (; i < len; i++) {
// 双重检测防止类似这样的数组 ar = [];ar[1]=1;ar[0] = undefined; 0 in ar =false;a[0]===undefined;
// 0 in arr => arr[0]是否存在 'nme' in arr => arr['nme']是否存在
if (i in arr && arr[i] === elem) {
return i;
}
}
}
return -1;
}

 

二、javascript中原型链常见的知识点

  1.hasOwnProperty()方法

   使用hasOwnProperty()方法可以检测一个属性是存在与实例,还是存在于原型中。这个方法从Object继承,只在给定属性存在于对象实例中时,才会返回true。

 

复制代码 代码如下:
function Person(){
this.age=25;
this.job="web";
}
Person.prototype={
name:'pingfan',
sayName:function(){
alert(this.name);
}
}
var person1=new Person();
//来自构造函数,检测属性,也返回true
alert(person1.hasOwnProperty("age"));
//来自原型属性,返回false
alert(person1.hasOwnProperty("name"));
person1.name='ping';
//来自实例属性,返回true
alert(person1.hasOwnProperty("name"));

 

  2.通过instanceOf保证只实例一次

 

复制代码 代码如下:
function shiCha(opt){
//只实例一次
if( !(this instanceof shiCha)){
return new shiCha(opt);