您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

JavaScript常用定义和方法

2024/4/17 20:05:23发布10次查看
1.字符串一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串。
touppercase()
把一个字符串全部变为大写:
var s = 'hello'; s.touppercase(); // 返回'hello'
tolowercase()
把一个字符串全部变为小写:
var s = 'hello';var lower = s.tolowercase(); // 返回'hello'并赋值给变量lowerlower; // 'hello'
indexof()
会搜索指定字符串出现的位置:
var s = 'hello, world'; s.indexof('world'); // 返回7s.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的索引为0arr.indexof(20); // 元素20的索引为1arr.indexof(30); // 元素30没有找到,返回-1arr.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新的长度: 4arr; // [1, 2, 'a', 'b']arr.pop(); // pop()返回'b'arr; // [1, 2, 'a']arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次arr; // []arr.pop(); // 空数组继续pop不会报错,而是返回undefinedarr; // []
unshift和shift
var arr = [1, 2]; arr.unshift('a', 'b'); // 返回array新的长度: 4arr; // ['a', 'b', 1, 2]arr.shift(); // 'a'arr; // ['b', 1, 2]arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次arr; // []arr.shift(); // 空数组继续shift不会报错,而是返回undefinedarr; // []
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; // undefinedxiaoming.age = 18; // 新增一个age属性xiaoming.age; // 18delete xiaoming.age; // 删除age属性xiaoming.age; // undefineddelete xiaoming['name']; // 删除name属性xiaoming.name; // undefineddelete 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'); // truexiaoming.hasownproperty('tostring'); // false
es6规范引入了新的数据类型map,set
var m = new map([['michael', 95], ['bob', 75], ['tracy', 85]]); m.get('michael'); // 95var s1 = new set(); // 空setvar 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) { // 遍历mapalert(x[0] + '=' + x[1]); }
4.函数
免费赠送的关键字arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似array但它不是一个array。
function foo(x) {     alert(x); // 10for (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;),控制权无法交回被调用的代码。
以上就是javascript常用定义和方法的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录