JS复习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q821901733/article/details/78042173

1、JS数据类型

  • 基本数据类型 (变量名和值都存储在栈内存中)

    • Number
    • String
    • Boolean
    • Undefined (表示一个标识被声明,但未赋值)
    • Null (表示一个标识被赋值了,且该标识赋值为“空值”,从逻辑角度来看,null值表示空对象指针)
  • 引用数据类型 (值存储在堆内存中,变量名和指向值在堆内存中的地址存储在栈内存)

    • Object
    • Array
  • Object.prototype.toString.call() 判断数据类型

2、判断对象是否为空

//js
function isEmpty(obj){
    var n ;
    for(n in obj){
        return false;
    }
    return true;
}
//jQ
$.isEmptyObject()  //为空返回true,反之返回false

3、复制一个对象的值

function cloneObj(obj){
    var newObj = new Object();
    for(var i in obj ){
        newObj[i] = obj[i];
    }

    return newObj;
}


4、数组方法

js方法 描述 用法
concat() 连接两个或多个数组 arrObj.concat(arrayX,…,arrayX)
join() 把数组中的所有元素放入一个字符串,不传参默认为逗号 arrObj.join(separator)
pop() 删除并返回数组的最后一个元素 arrObj.pop()
push() 向数组的末尾添加一个或更多元素,并返回新的长度 arrObj.push(newelement1,…,newelementX)
shift() 删除并返回数组的第一个元素 arrObj.shift()
unshift() 向数组的开头添加一个或更多元素,并返回新的长度 arrObj.unshift(newelement1,….,newelementX)
slice() 从某个已有的数组返回选定的元素组成的新数组,如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素(不会改变原始数组) arrObj.slice(start,end)
splice() 从数组的index位置删除howmany个元素,如果有要添加的元素item,则会替换删除的元素并返回删除的元素;如果没有,直接返回删除的元素(会改变原始数组 arrObj.splice(index,howmany,item1,…,itemX)
sort() 对数据进行排序,在function中编写排序规则,如果没有function,则按字符编码的顺序进行排序(会改变原始数组 arrObj.sort(function)
reverse() 颠倒数组中元素的位置 arrObj.reverse()
forEach() 遍历数组并对每个元素都执行一次回调函数(return语句没用,且不能结束当前循环) arrObj.forEach(function(currentValue, index, arr), thisValue)
map() 通过指定函数处理数组的每个元素,并返回处理后的数组(return语句可以改变当前循环元素的值,同样不能结束当前循环) arrObj.forEach(function(currentValue, index, arr), thisValue)
every() 使用指定函数检测数组中的所有元素,全部通过返回true,否则返回false arrObj.every(function)
filter() 检测数值元素,并返回符合条件所有元素的数组 arrObj.filter(function(currentValue,index,arr), thisValue)
find() 返回符合传入测试(函数)条件的第一个数组元素 arrObj .find(function(currentValue, index, arr),thisValue)
findIndex() 返回符合传入测试(函数)条件的数组元素索引 arrObj.findIndex(function(currentValue, index, arr), thisValue)
reduce() 将数组元素计算为一个值(从左到右) arrObj.findIndex(function(currentValue, index, arr), thisValue)
reduceRight() 将数组元素计算为一个值(从右到左 ) arrObj.reduce(function(total, currentValue, currentIndex, arr), initialValue)


5、字符串方法

方法 描述 用法
charAt() 返回在指定位置的字符 stringObject.charAt(index)
charCodeAt() 返回在指定的位置的字符的 Unicode 编码 stringObject.charCodeAt(index)
concat() 连接字符串 stringObject.concat(stringX,…,stringX)
indexOf() 返回某个指定的字符串值在字符串中首次出现的位置 stringObject.indexOf(searchvalue,fromindex)
lastIndexOf() 从后向前搜索某个指定的字符串值在字符串中首次出现的位置 stringObject.lastIndexOf(searchvalue,fromindex)
match() 在字符串内检索指定的值,或找到一个或多个正则表达式的匹配.返回指定的值 stringObject.match(searchvalue/regexp)
replace() 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串 stringObject.replace(regexp/substr,replacement)
search() 检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,找到返回索引位置,没找到则返回-1 stringObject.search(regexp)
slice() 提取并返回字符串的某个部分start到end(不包括end,没有end时截取到末尾;下标如果为负数,则从尾部开始算) stringObject.slice(start,end)
split() 把一个字符串分割成字符串数组 stringObject.split(separator,howmany)
substr() 在字符串中抽取从 start 下标开始的指定length的字符(省略length则截取到末尾) stringObject.substr(start,length)
substring() 提取字符串中介于两个指定下标之间的字符(与slice和substr不同的是,不接受负的参数) stringObject.substring(start,stop)


6、使用new时,js内部发生了什么

function Foo(){}
var obj = new Foo();

当 new Foo()执行时,首先创建一个空对象;然后继承于 Foo.prototype(原型对象);接着,Foo()的构造函数会被执行,执行的时候,传入相应的传参,同时上下文(this)会被指定为这个新实例(new foo 等同于 new foo(), 只能用在不传递任何参数的情况);最后,如果构造函数返回了一个“对象”,那么这个对象会取代整个new出来的结果。如果构造函数没有返回对象,那么new出来的结果为第一步创建的对象。


7、this 关键字

  • 无论是否在严格模式下,在全局执行上下文中(在任何函数体外部)this都指代全局对象
function f1(){
  return this;
}
//在浏览器中:
f1() === window;   //在浏览器中,全局对象是window
  • 当以对象里的方法的方式调用函数时,它们的 this 是调用该函数的对象
var obj = {
    name: 'ZhangSan',
    f:function(){
    console.log(this.name)
    }
}
obj.f()  // ZhangSan
// 这里的 this 指向 obj
  • 原型链中的 this,指向的是调用这个方法的对象

  • 通过call()方法和apply()方法调用,this的值可以绑定到一个指定的对象

// 一个对象可以作为call和apply的第一个参数,并且this会被绑定到这个对象。
var obj = {a: 'Custom'};

// 这个属性是在global对象定义的。
var a = 'Global';

function whatsThis(arg) {
  return this.a;  // this的值取决于函数的调用方式
}

whatsThis();          // 直接调用,      返回'Global'
whatsThis.call(obj);  // 通过call调用,  返回'Custom'
whatsThis.apply(obj); // 通过apply调用 ,返回'Custom'
  • 箭头函数会继承外层函数调用的this绑定
////这个返回的函数是以箭头函数创建的,所以它的this被永久绑定到了它外层函数的this。
var obj = {bar: function() {
                    var x = (() => this);
                    return x;
                  }
          }
// 作为obj对象的一个方法来调用bar,把它的this绑定到obj。
// x所指向的匿名函数赋值给fn。
var fn = obj.bar();

// 直接调用fn而不设置this,通常(即不使用箭头函数的情况)默认为全局对象,若在严格模式则为undefined
console.log(fn() === obj); // true
// 但是注意,如果你只是引用obj的方法,而没有调用它(this是在函数调用过程中设置的)
var fn2 = obj.bar;
// 那么调用箭头函数后,this指向window,因为它从 bar 继承了this。
console.log(fn2()() == window); // true
  • 当一个函数用作构造函数时(使用new关键字),它的this被绑定到正在构造的新对象
function Person(name,age){
    this.name = name;
    this.age = age;
    // this指向正构造的新对象
}
// this 指向 person1
var person1 = new Person()

8、call 和 apply 的区别

  • 共同作用: 调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表),即改变函数体内部 this 的指向

  • 两者区别:

    • call()方法接受的是若干个参数的列表
    • apply()方法接受的是一个包含多个参数的数组
function Person(name,age){
    this.name = name;
    this.age = age;
}
function Student(name,age){
    Person.call(this,name,age);
    this.job = 'student';
}
var arr1 = [1,2,3,4];
var arr2 = ['a','b','c','d']
Array.prototype.push.apply(arr1,arr2)
// arr1 = [1, 2, 3, 4, "a", "b", "c", "d"]
Array.prototype.push.call(arr1,arr2)
// arr1 = [1,2,3,4,['a','b','c','d']]

常见 call()用法:

 var arr = [1,34,5,676,521,3,45];
 Math.max.apply(Math,arr);
 Math.max.call(Math,1,34,5,676,521,3,45);
 //  676

9、原生DOM操作

方法 描述
element.appendChild(node) 向元素节点的子节点列表的末尾添加新的子节点
element.childNodes 返回包含被选节点的子节点的 NodeList
element.parentNode 返回某节点的父节点
element.previousSibling 返回某节点之前紧跟的节点(处于同一树层级)返回节点以节点对象返回
element.nextSibling 返回某个元素之后紧跟的节点(处于同一树层级中)返回节点以节点对象返回
element.firstChild 返回被选节点的第一个子节点
element.lastChild 返回文档的最后一个子节点。
element.cloneNode(Boolean) 复制并返回调用它的节点的副本。参数是 true,还将递归复制当前节点的所有子孙节点;否则,只复制当前节点。
element.nodeName 可依据节点的类型返回其名称
element.nodeType 如果节点是一个元素节点,返回 1;如果节点是属性节点,返回 2等等十二种
element.nodeValue 根据节点的类型设置或返回节点的值
element.insertBefore(newnode,existingnode) 在已有的子节点前插入一个新的子节点
element.removeChild(node) 从子节点列表中删除某个节点,失败,则返回 NULL
element.replaceChild(newnode,oldnode) 将某个子节点替换为另一个(新节点可以是文本中已存在的,或者是你新创建的)
element.className 设置或返回元素的 class 属性
element.innerHTML 设置或返回表格行的开始和结束标签之间的 HTML(可以自动解析HTML标签)
element.textContent 设置或者返回指定节点的文本内容;如果设置了 textContent 属性, 任何的子节点会被移除及被指定的字符串的文本节点替换
element.getAttribute(attributename) 返回指定元素的属性值
element.hasAttribute(attributename) 如果元素中存在指定的属性返回 true,否则返回false
element.removeAttribute(attributename) 从元素中删除指定的属性
element.setAttribute(attributename) 设置或者改变指定属性并指定值

猜你喜欢

转载自blog.csdn.net/q821901733/article/details/78042173