javascript常用定义和方法

努力成为一名合格的前端开发工程师!!!      2022-02-11     274

关键词:

1.字符串一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串。
toUpperCase()
把一个字符串全部变为大写:

var s = ‘Hello‘;
s.toUpperCase(); // 返回‘HELLO‘


toLowerCase()
把一个字符串全部变为小写:

var s = ‘Hello‘;
var lower = s.toLowerCase(); // 返回‘hello‘并赋值给变量lower
lower; // ‘hello‘


indexOf()
会搜索指定字符串出现的位置:

var s = ‘hello, world‘;
s.indexOf(‘world‘); // 返回7
s.indexOf(‘World‘); // 没有找到指定的子串,返回-1


substring()
返回指定索引区间的子串:

var s = ‘hello, world‘
s.substring(0, 5); // 从索引0开始到5(不包括5),返回‘hello‘
s.substring(7); // 从索引7开始到结束,返回‘world‘


2.数组常用方法
indexOf()
来搜索一个指定的元素的位置

var arr = [10, 20, ‘30‘, ‘xyz‘];
arr.indexOf(10); // 元素10的索引为0
arr.indexOf(20); // 元素20的索引为1
arr.indexOf(30); // 元素30没有找到,返回-1
arr.indexOf(‘30‘); // 元素‘30‘的索引为2


slice()
截取Array的部分元素,然后返回一个新的Array:

var arr = [‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘];
arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: [‘A‘, ‘B‘, ‘C‘]
arr.slice(3); // 从索引3开始到结束: [‘D‘, ‘E‘, ‘F‘, ‘G‘]

注意到slice()的起止参数包括开始索引,不包括结束索引。
如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array。

push和pop
push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉:

var arr = [1, 2];
arr.push(‘A‘, ‘B‘); // 返回Array新的长度: 4
arr; // [1, 2, ‘A‘, ‘B‘]
arr.pop(); // pop()返回‘B‘
arr; // [1, 2, ‘A‘]
arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次
arr; // []
arr.pop(); // 空数组继续pop不会报错,而是返回undefined
arr; // []


unshift和shift

var arr = [1, 2];
arr.unshift(‘A‘, ‘B‘); // 返回Array新的长度: 4
arr; // [‘A‘, ‘B‘, 1, 2]
arr.shift(); // ‘A‘
arr; // [‘B‘, 1, 2]
arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次
arr; // []
arr.shift(); // 空数组继续shift不会报错,而是返回undefined
arr; // []

sort
对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序:

var arr = [‘B‘, ‘C‘, ‘A‘];
arr.sort();
arr; // [‘A‘, ‘B‘, ‘C‘]

reverse
把整个Array的元素给掉个个,也就是反转:

var arr = [‘one‘, ‘two‘, ‘three‘];
arr.reverse();
arr; // [‘three‘, ‘two‘, ‘one‘]


splice
修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素

var arr = [‘Microsoft‘, ‘Apple‘, ‘Yahoo‘, ‘AOL‘, ‘Excite‘, ‘Oracle‘];
// 从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2, 3, ‘Google‘, ‘Facebook‘); // 返回删除的元素 [‘Yahoo‘, ‘AOL‘, ‘Excite‘]
arr; // [‘Microsoft‘, ‘Apple‘, ‘Google‘, ‘Facebook‘, ‘Oracle‘]
// 只删除,不添加:
arr.splice(2, 2); // [‘Google‘, ‘Facebook‘]
arr; // [‘Microsoft‘, ‘Apple‘, ‘Oracle‘]
// 只添加,不删除:
arr.splice(2, 0, ‘Google‘, ‘Facebook‘); // 返回[],因为没有删除任何元素
arr; // [‘Microsoft‘, ‘Apple‘, ‘Google‘, ‘Facebook‘, ‘Oracle‘]


concat
把当前的Array和另一个Array连接起来,并返回一个新的Array

var arr = [‘A‘, ‘B‘, ‘C‘];
var added = arr.concat([1, 2, 3]);
added; // [‘A‘, ‘B‘, ‘C‘, 1, 2, 3]
arr; // [‘A‘, ‘B‘, ‘C‘]


join

var arr = [‘A‘, ‘B‘, ‘C‘, 1, 2, 3];
arr.join(‘-‘); // ‘A-B-C-1-2-3‘


3.对象
由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:

var xiaoming = {
    name: ‘小明‘
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
delete xiaoming[‘name‘]; // 删除name属性
xiaoming.name; // undefined
delete xiaoming.school; // 删除一个不存在的school属性也不会报错


检测xiaoming是否拥有某一属性,可以用in操作符:

var xiaoming = {
    name: ‘小明‘,
    birth: 1990,
    school: ‘No.1 Middle School‘,
    height: 1.70,
    weight: 65,
    score: null
};
‘name‘ in xiaoming; // true
‘grade‘ in xiaoming; // false

不过要小心,如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的:
要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:

var xiaoming = {
    name: ‘小明‘
};
xiaoming.hasOwnProperty(‘name‘); // true
xiaoming.hasOwnProperty(‘toString‘); // false


ES6规范引入了新的数据类型Map,Set

var m = new Map([[‘Michael‘, 95], [‘Bob‘, 75], [‘Tracy‘, 85]]);
m.get(‘Michael‘); // 95

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3


ES6标准引入了新的iterable类型(可逸代)
Array、Map和Set都属于iterable类型。
通过新的for ... of循环来遍历

var a = [‘A‘, ‘B‘, ‘C‘];
var s = new Set([‘A‘, ‘B‘, ‘C‘]);
var m = new Map([[1, ‘x‘], [2, ‘y‘], [3, ‘z‘]]);
for (var x of a) { // 遍历Array
    alert(x);
}
for (var x of s) { // 遍历Set
    alert(x);
}
for (var x of m) { // 遍历Map
    alert(x[0] + ‘=‘ + x[1]);
}


4.函数
免费赠送的关键字arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但它不是一个Array。

function foo(x) {
    alert(x); // 10
    for (var i=0; i<arguments.length; i++) {
        alert(arguments[i]); // 10, 20, 30
    }
}
foo(10, 20, 30);


Max是一个JavaScript新手,他写了一个max()函数,返回两个数中较大的那个:

document.write(Math.max(7.25,7.30));


5.变量作用域
ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量

‘use strict‘;
function foo() {
    var sum = 0;
    for (let i=0; i<100; i++) {
        sum += i;
    }
    i += 1; // SyntaxError
}


ES6标准引入了新的关键字const来定义常量,const与let都具有块级作用域

const PI = 3.14;
PI = 3; // 某些浏览器不报错,但是无效果!
PI; // 3.14


6.高级函数
map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果。

function pow(x) {
    return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]


reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:

[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x + y;
}); // 25


filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。
把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
例如,在一个Array中,删掉偶数,只保留奇数

var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
    return x % 2 !== 0;
});
r; // [1, 5, 9, 15]


把一个Array中的空字符串删掉,可以这么写:

var arr = [‘A‘, ‘‘, ‘B‘, null, undefined, ‘C‘, ‘  ‘];
var r = arr.filter(function (s) {
    return s && s.trim(); // 注意:IE9以下的版本没有trim()方法
});
r; // [‘A‘, ‘B‘, ‘C‘]


匿名的函数(没有函数名的函数)

var friends = ["Mike", "Stacy", "Andy", "Rick"];

friends.forEach(function (eachName, index){
console.log(index + 1 + ". " + eachName); // 1. Mike, 2. Stacy, 3. Andy, 4. Rick
});


sort排序算法

// 看上去正常的结果:
[‘Google‘, ‘Apple‘, ‘Microsoft‘].sort(); // [‘Apple‘, ‘Google‘, ‘Microsoft‘];
// apple排在了最后:
[‘Google‘, ‘apple‘, ‘Microsoft‘].sort(); // [‘Google‘, ‘Microsoft", ‘apple‘]
// 无法理解的结果:
[10, 20, 1, 2].sort(); // [1, 10, 2, 20]


第二个排序把apple排在了最后,是因为字符串根据ASCII码进行排序,而小写字母a的ASCII码在大写字母之后。
第三个排序结果是什么鬼?简单的数字排序都能错?
这是因为Array的sort()方法默认把所有元素先转换为String再排序,结果‘10‘排在了‘2‘的前面,因为字符‘1‘比字符‘2‘的ASCII码小。

7闭包
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回

function lazy_sum(arr) {
    var sum = function () {
        return arr.reduce(function (x, y) {
            return x + y;
        });
    }
    return sum;
}


当我们调用lazy_sum()时,返回的并不是求和结果,而是求和函数:

var f = lazy_sum([1, 2, 3, 4, 5]); // function sum()

调用函数f时,才真正计算求和的结果:

f(); // 15


在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。

请再注意一点,当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数:

var f1 = lazy_sum([1, 2, 3, 4, 5]);
var f2 = lazy_sum([1, 2, 3, 4, 5]);
f1 === f2; // false

f1()和f2()的调用结果互不影响。

8.箭头函数
ES6标准新增了一种新的函数:Arrow Function(箭头函数)。
为什么叫Arrow Function?因为它的定义用的就是一个箭头:
x => x * x
上面的箭头函数相当于:

function (x) {
    return x * x;
}


generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次。

function* foo(x) {
    yield x + 1;
    yield x + 2;
    return x + 3;
}

函数在执行过程中,如果没有遇到return语句(函数末尾如果没有return,就是隐含的return undefined;),控制权无法交回被调用的代码。

























































数组常用一些方法

...象的实例2.使用函数来定义对象,然后创建新的对象实例JavaScript基于prototype,而不是基于类的。  <scripttype="text/javascript">     //join():数组的所有元素放入一个字符串。自定义分隔符。     varaa=[1,23,4,56];   ... 查看详情

javascript中常用的判断和循环方法

一,常用判断方式     1,if(条件表达式){执行表达式}    2,switch(条件表达式){     case1:执行表达式 break;    case2:执行表达式 break;&nbs 查看详情

javascript常用类型检测

  1.判断变量是否为数组的数据类型?  方法一:判断其是否具有“数组性质”,如slice()方法。可自己给该变量定义slice方法,故有时会失效。  方法二:objinstanceofArray,但是在某些IE版本中不正确  方法三:来自于zepto... 查看详情

javascript-extjs-常用方法和属性

常用方法和属性(Commonmethodsandattributes)获取get(x)x是元素的ID||dom元素对象||ExtElement对象将参数所指转化为ExtElement对象并返回它(非Dom元素对象,而是对Dom元素的封装),此方法等同于newExt.Element(x)。Ext.select(x)x是选择器返回一个... 查看详情

javascript数组常用方法解析和深层次js数组扁平化

...我们需要考虑到深拷贝和浅拷贝的情况可以参考以下文章javaScript中深拷贝和浅拷贝简单梳理深度解析javaScript常见数据类型检查校验常用数组操作方法push末尾追加元素/* 查看详情

8个最常用的javascript对象方法

Javascript对象方法是包含内置函数定义的属性,用于有效地处理单个对象并从中获取信息。语法:ObjectName.methodName()在本文中,我们将讨论Javascript中8个最常用的对象方法,它们将帮助你更轻松地使用对象原型!... 查看详情

javascript常用方法

什么是javascript?  (1) JavaScript是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言。  (2)JavaScript是由Netscape公司开发的一种脚本语言,其编写的程序可以嵌入到HTML页面中,并直接在浏览器中解... 查看详情

javascript中常用的bom对象(属性方法)

window对象定义:一个浏览器窗口实例与窗口有关的信息(应用程序编程接口)  ECMAScript规定的Global对象方法open(url),返回标识符引用即将打开窗口的。(调用该引用对象的close方法 即可关闭该窗口)间歇调用setInterval(... 查看详情

javascript浅析javascript对象如何添加属性和方法

向JavaScript类中添加属性和方法,最直观的做法就是在类中定义属性和方法。JavaScript是一门弱语言,除了直接定义还可以用prototype来添加。下面介绍从外部向JavaScript添加属性和方法的四种方法,首先定义一个类functionMyClass(){}1,使... 查看详情

Javascript 定义对象属性和函数的新方法? [复制]

】Javascript定义对象属性和函数的新方法?[复制]【英文标题】:Javascriptnewwaytodefineobjectpropertiesandfunctions?[duplicate]【发布时间】:2011-08-2407:42:31【问题描述】:可能重复:WhatisthepurposeofwrappingwholeJavascriptfilesinanonymousfunctionslike“(fun... 查看详情

javascript中一些常用的方法整理

当前时间和输入时间比较vartimeLong=Date.parse(newDate());//当前时间vart1=Date.parse($("#returnTime2").val().replace(/-/g,"/"));timeLong是通过js获取当前时间t1火狐不支持2012-1-1这种格式,所以需要转换一下。替换所有要替换的文字replaceAllString.prototyp... 查看详情

javascript中的深拷贝和浅拷贝常用方法总结(代码片段)

本文乃学习总结,学习参考自:https://medium.com/javascript-in-plain-english/how-to-deep-copy-objects-and-arrays-in-javascript-7c911359b089对于引用类型(数值类型的拷贝就是字面的拷贝,就不说了)来说,赋值运算符 查看详情

javascript的一些基础语法和常用方法(附代码)(代码片段)

...字典4.数组与对象5.类型与转换6.生成随机数数组总结前言JavaScript是前端经常要用的脚本语言,用过好多次。还是需要总结一下方便以后copy。一、运行环境一般都是嵌在HTML里面,在HTML中写个里面就可以写Jav 查看详情

javascript常用字符串方法总结(代码片段)

Javascript常用字符串方法总结常用的字符串方法与查询相关查询字符串长度查询目标值的下标查询下标对应的值与修改相关与转换相关与提取相关与拼接有关常用的字符串方法这里说的所有方法都不会改变原字符串,都是对其... 查看详情

javascript字符串常用方法详解

字符串的声明1.值类型赋值varstr="helloworld"2.以new关键词声明(引用了对应的值的地址)varstr=newString("abc");//引用了空值的地址3.newString()和String()区别newString是构建一个Str 查看详情

js对象定义的最常用的三种方法

定义对象:属性和方法的结合体(变量和函数的结合体) 1.(***)varobj={} 2.varobj=newObject(); 3.使用function定义对象具体例子分别为:1//1.定义obj的对象2//obj:对象名3varobj={4//height,weight,sex称为对象的属性5height:170,//使用,分隔属性和... 查看详情

javascrip笔记心得(持续更新)(代码片段)

JavaScrip笔记心得一、JavaScript简介1、JavaScript2、JavaScript使用方法3、JavaScript的核心构成4、Javascript的代码注释5、Javascript的数据类型6、变量的声明和赋值7、表达式与运算符二、JavaScrip语句和函数1、if分支结构2、switch分支结构3、whi... 查看详情

javascript常用数据类型及数据转换

一、原始数据类型:string,number,boolean,null,undefined,object.(简单的用(typeofxx)去判断)1)基本数据类型:a)string(字符串)数据基本类型(自变量)和引用类型1.定义一个基本数据类型的字符串vars="xiao.ming";2.定义一个基本数据的引用类型... 查看详情