js中常见问题汇总(时时更新)

1.getElementById和querySelector
getElementById获取的是动态集合,querySelector获取的是静态集合。
2.三目运算符优先级

boolean b=true?false:true?false:true;

此时三目运算符执行顺序为:从右向左执行,true?false:true 返回false,这时的表达式为:boolean b=true?false:false 最终结果为:false。

3.call 在数组中的简单用法

//  对象中有length属性
var a={length:2,0:'first',1:'second'};
//相当于调用数组的slice(1);
console.log(Array.prototype.slice.call(a,1)); //["second"]

//对象中去掉length属性,返回一个空数组
var a={0:'first',1:'second'};
console.log(Array.prototype.slice.call(a,0)); //[]

4.apply 传参简单用法

//ES5中
function f(x, y, z) {
  console.log(x,y,z); //0,1,2
}
var args = [0, 1, 2];
f.apply(null, args);

//ES6 替代方法
function f(x, y, z) {
  console.log(x,y,z); //0,1,2
}
let args = [0, 1, 2];
f(...args);

5.setTimeout 参数

setTimeout(function (a,b,c) {
    console.log(a,b,c); //3,5,3
},2000, ...[3,5,3]);

6.slice() 与splice() 讲解

slice() 方法可从已有的数组中返回选定的元素。
注释:该方法不会改变原始数组。

arrayObject.slice(start,end)

参数 描述
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
注释:该方法会改变原始数组。

arrayObject.splice(index,howmany,item1,.....,itemX)

参数 描述
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, …, itemX 可选。向数组添加的新项目。

7.typeof
typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下6种:number、boolean、string、object、undefined、function 。es6中新增加了一种symbol(ES6)。

undefined
string
boolean
number
symbol(ES6)
Object
Function

8.instanceof

[] instanceof Array;  //true
[] instanceof Ojbect; //true

从 instanceof 能够判断出 [ ].proto 指向 Array.prototype,而 Array.prototype.proto 又指向了Object.prototype,最终 Object.prototype.proto 指向了null,标志着原型链的结束。因此,[]、Array、Object 就在内部形成了一条原型链:
这里写图片描述
缺点:instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。

9.DOM元素的特性(Attribute)和属性(Property)
(1).简单理解,Attribute就是dom节点自带的属性,例如html中常用的id、class、title、align等

<div id="div1" class="divClass" title="divTitle"></div>

而Property是这个DOM元素作为对象,其附加的内容,例如childNodes、firstChild等:
这里写图片描述
(2).常用的Attribute,例如id、class、title等,已经被作为Property附加到DOM对象上,可以和Property一样取值和赋值。但是自定义的Attribute,就不会。

<div id="div1" class="divClass" title="divTitle" title1="divTitle1">100</div>

这个div里面的“title1”就不会变成Property。

即,只要是DOM标签中出现的属性(html代码),都是Attribute。然后有些常用特性(id、class、title等),会被转化为Property。
注意:“class”变成Property之后叫做“className”,因为“class”是ECMA的关键字。以下代码等价:

var className = div1.className;
var className1 = div1.getAttribute("class");

(3).取值与赋值 建议大家用setAttribute()和getAttribute()来操作
3.1. Attribute取值:

<div id="div1" class="divClass" title="divTitle" align="left" title1="divTitle1"></div>

var id = div1.getAttribute("id");              
var className1 = div1.getAttribute("class");
var title = div1.getAttribute("title");
var title1 = div1.getAttribute("title1");   //自定义特性

getAttribute()可以取得任何特性,不管是标准的还是自定义的。

3.2. Attribute赋值:

div1.setAttribute('class', 'a');
div1.setAttribute('title', 'b');
div1.setAttribute('title1', 'c');
div1.setAttribute('title2', 'd');

用setAttrbute()赋值,任何Attribute都可以,包括自定义的。而且,赋值的Attribute会立刻表现到DOM元素上。

<div id="div1" class="a" title="b" align="left" title1="c" title1="d">100</div>

注意,setAttribute()的两个参数,都必须是字符串。即对特性Attribute职能赋值字符串,而对属性Property就可以赋任何类型的值了。

3.3. Property取值:

属性取值很简单。取任何属性的值,用“.”就可以:

var id = div1.id;
var className = div1.className;
var childNodes = div1.childNodes;
var attrs = div1.attributes;

再次强调:

第一,class特性在变成属性时,名字改成了“className”,因此div1.className和div1.getAttrbute(‘class’)相同。

第二,上面代码中的div1.attributes是取的attributes这一属性,取出来保存到attrs变量中,attrs就成了一个NamedNodeList类型的对象,里面存储了若干个Attr类型。

3.4. Property赋值:

赋值和基本的js对象属性赋值一样,用“.”即可:

div1.className = 'a';
div1.align = 'center';
div1.AAAAA = true;
div1.BBBBB = [1, 2, 3];

对属性Property可以赋任何类型的值,而对特性Attribute只能赋值字符串!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值