javaScript学习笔记(1)

        最近从新看了一下js,发现里面有很多我们学习时容易忽略的知识点,我稍微整理了一下,本人知识储备极其有限,如有纰漏或错误,欢迎留言指出。以下是内容:

1、整数(包括负数)和浮点数都用Number表示。
1.1、NaN表示Not a Number,当无法计算结果时用NaN表示
1.2、Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
2、相等运算符==和===
2.1、==会自动转换数据类型后再进行比较,===则不会,类型不一样也返回false,类型一样后,在比较。建议使用===
2.2、NaN和自身比较结果是false,即 NaN === NaN = false,只能用isNaN()来判断,即isNaN(NaN) = true;
2.3、浮点数比较要注意:1 / 7 === (1 - 6 / 7) = false;因为js不能准确表示无限小数,可以使用绝对值来判断相等:Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001;
3、null 和 undefined
3.1、null表示一个“空”的值,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串,而null表示“空”。
3.2、undefined 表示未定义。
4、字符串
4.1、ASCII字符可以以\x##形式的十六进制表示,例如:'\x41';完全等同于'A' 可以用\u####表示一个Unicode字符:'\u4e2d\u6587'完全等同于'中文'
4.2、多行字符串除了用\n换行,还可以直接用反引号``(ES6中支持),在反引号里面可以随便换行不用\n,如:
var str = `abc
cad
dca`;
4.3、ES6中的模板字符串使用:
var name = 'mac';
var age = 25 ;
var text = '我是 ${name}, 我今年${age}岁了!';
4.4、字符串是不可变的,如果对字符串的某个索引赋值,虽然不会报错,但是也没有任何效果。
4.5、js的一些字符串处理函数(如:toUpperCase()、toLowerCase()等),不会改变原字符串的值,而是返回一个新字符串。
5、数组
5.1、一个js数组可以存放各种类型的数据,并通过索引访问。
5.2、length属性返回数组的长度,同时我们可以给length属性赋值。但是赋值会改变数组长度,如数组a是[1,2,3];我们做如下操作:a.length = 6;那么a就变成了[1,2,3,,,],如果a.length = 2;就变成[1,2],是不是很好玩。
5.3、还记得数组越界异常么,js中不那么严格,例如数组a是[1,2,3],那a[4]是多少?没错是ndefined!值得注意的的是如果我们越界给元素赋值的时候会引起数组的变化。例如a[4]='a4'反过来看看数组a变成[1,2,3,,'a4']
5.4、虽然js支持修改长度,越界访问和赋值也不会报错,但我们在实际开发中要避免,使用这些特性也要很仔细。
5.5、数组操作的几个常用方法.
5.5.1、indexOf():搜索指定元素的下标;
5.5.2、slice():数组截取,例如slice(1,3)指从下标1开始截取3个;slice(3)指从下标3开始截取到最后,什么参数都不传截取全部,可以用来copy这个数组;
5.5.3、push()和pop():push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉
5.5.4、unshift()和shift():unshift()在数组前面添加若干元素,shift()把第一个元素删掉;
5.5.5、reverse():反转
5.5.6、splice():从指定的索引开始删除若干元素,然后再从该位置添加若干元素;例如arr.splice(1,3,'a','b')指的是从下标1开始删掉三个元素,并在这边追加'a','b'两个元素,并返回删除的元素。可以只删除不添加,如arr.splice(1,3);也可以只添加不删除,如arr.splice(1,0,'a','b');
6、对象
5.1、JavaScript的对象是一组由键-值组成的无序集合,要获取一个对象的属性,我们用 对象变量.属性名 的方式访问属性;
5.2、如果属性名包含特殊字符,就必须用''括起来:如:
var man = {
name : 'mac',
'whork-address' : 'suzhou' //访问的时候也只能用如下方式:man['whork-address']
}
5.3、JavaScript对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型。
5.4、访问不存在的属性,不会报错,而是返回undefined
5.5、可以随意的给对象增加或者删除属性,如上面的man对象,以下操作增加一个属性:man.age = 25;删除一个属性用delete man.age ;或者 delete man['age'];删除一个不存在的属性如:delete man.Gender ;也不会报错,但是谁会这么做呢。
5.6、用in操作符可以判断对象是否拥有某个属性,例如:'age' in man ; 拥有则返回true反之则false,但是用in操作符判断的属性不一定是这个对象自带的,他通过继承得来的属性,做此判断也会返回true,如果要判断一个属性是否是某个对象的自身的属性,用hasOwnProperty()方法即可,如:man.hasOwnProoerty('age');返回true or false。
7、变量
7.1、可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
7.2、js是动态语言,与之对应的是静态语言。静态语言(java等)在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。
7.3、如果变量在定义的时候不用var关键字定义,那么他将会是一个全局变量。这就有一个隐患,比如在同一个页面中引用的多个js片段里面都出现了没用var申明的变量i,就会有问题,所以要特别注意。
7.4、理论上可以中文作为变量名,但是强烈不建议。

猜你喜欢

转载自blog.csdn.net/maaici/article/details/79360968