JavaScript自学笔记(必看篇)

0-判断变量、参数是否初始化

if(x){} //变量被初始化了或者变量不为空或者变量不为零

1-声明函数不需要声明返回值、参数类型,句尾甚至都不需要';'

function sum(i1,i2){return i1+i2}

2-直接声明匿名函数立即使用

var f=function(i1,i2){return i1+i2;}; alert(f(1,2));//普通匿名函数 alert(function(i1,i2){return i1+i2;}(3,4));//直接声明,立即使用

3-js中没有类的概念,于是有些方法就长的像类了

function Person(name,age){ this.Name=name;//动态增加属性,类似于C#里的dynamic A = new ExpendoObject(); this.Age=age; this.SayHello=function(){alert('Hello,My name is '+name+' I am '+age+' years old.')}; } var p1=new Person('lorry',21); p1.SayHello(); //像类一样调用 p1.Gender='男'; //动态增加‘性别'属性 alert(p1.Gender);

4-Array对象就是数组,定义数组不用预先限定长度

var arr=new Array(); arr[0]=0; arr[1]=1; arr[2]=2; for(var i=0;i<=arr.length-1;i++){ alert(arr[i]); }

5-Array是数组,也是Dictionary,也是Stack

var dict=new Array();//作为Dictionary使用 dict['我']='wo'; dict['爱']='ai'; dict['你']='ni'; alert(dict['我']); //通过键值调用 alert(dict.爱); //像调用属性一样调用(动态语言的特性) for(var k in dict){ //js中的遍历 alert(k); //'我','爱','你'-->打印出的是key } for(var k of dict){ //js中的遍历 alert(k); //'wo','ai','ni'-->打印出的是value } var arr = [1,2,3,4,5];//Array的简化创建方式 var arr = {"lorry":21,"cloud":20};//字典风格的创建方式

6-遍历当前页面能够调用的所有元素

var s=null; for(var k in document){//对象的属性都是以key的形式出现的 s+=k+" ;"; } alert(s);

7-使用类似Array的下标操作获取字符串某个指定位置的字符

var s = 'Hello, world!'; s[0]; // 'H' s[6]; // ' ' s[12]; // '!' s[13]; // undefined 超出范围的索引不会报错,但一律返回undefined 需要特别注意的是,字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果: var s = 'Test'; s[0] = 'X'; alert(s); // s仍然为'Test'

8-改大写小写

var s = 'Hello'; s.toUpperCase(); // 返回'HELLO' var s = 'Hello'; s.toLowerCase(); // 返回'hello'

9-搜索指定字符串出现的位置

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

10-获取字符串指定索引区间的子串

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

11-JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成

var xiaoming = { name: '小明', birth: 1990, school: 'No.1 Middle School', height: 1.70, weight: 65, score: null//最后一个键值对不需要在末尾加',' }; xiaoming.name; // '小明' xiaoming.birth; // 1990 访问属性是通过.操作符完成的,但这要求属性名必须是一个有效的变量名。如果属性名包含特殊字符,就必须用[]括起来: var xiaohong = { name: '小红', 'middle-school': 'No.1 Middle School' }; xiaohong['middle-school']; // 'No.1 Middle School' xiaohong['name']; // '小红' xiaohong.name; // '小红' xiaohong.age; // undefined

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

'name' in xiaoming;// true 'grade' in xiaoming;// false ***如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的: 'toString' in xiaoming; // true ***要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法: xiaoming.hasOwnProperty('name'); // true xiaoming.hasOwnProperty('toString'); // false

13-Map

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);//二维数组初始化法 m.get('Michael'); // 95 var m = new Map();// 直接初始化一个空Map m.set('Adam', 67); // 添加新的key-value m.set('Bob', 59); m.has('Adam'); // 是否存在key 'Adam': true m.get('Adam'); // 67 m.delete('Adam'); // 删除key 'Adam' m.get('Adam'); // undefined var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); for (var n of m) { // 遍历Map alert(n[1] + '=' + n[0]); }

14-iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。

var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) { // element: 指向当前元素的值 // index: 指向当前索引 // array: 指向Array对象本身 alert(element); }); Set与Array类似,但Set没有索引,因此回调函数最多两个参数: var s = new Set(['A', 'B', 'C']); s.forEach(function (element, set) { alert(element); }); Map的回调函数参数依次为value、key和map本身: var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); m.forEach(function (value, key, map) { alert(value); }); var a = ['A', 'B', 'C']; a.forEach(function (element) { alert(element); });

15-用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果:

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

16-用map()把Array的所有数字转为字符串:

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']

17-用Array的reduce()做累积计算

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzsdpf.html