JS基础知识(一)

一、比较运算符

1、 有两种比较远算符:

== :会自动转换数据类型再进行比较,有时会出现很诡异的结果。

=== :它不会转换数据类型,如果数据类型不一致,则会返回false,如果一致再比较。

由于javascript这个缺陷,不要使用“==”进行比较,要坚持使用“===”。

2、 NaN 属性是代表非数字值的特殊值(Not a Number)。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。NaN这个特殊的Number与其他任何值都不相等,包括它自己:

NaN === NaN;  //false

唯一能判断NaN的方法是通过isNaN() 函数(isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况)

isNaN(NaN);    //true

这里需要注意当除数或者被除数是0的情况,被除数是0结果为NaN,除数是0结果为Infinity

2 / 0;  // Infinity

0 / 0;  // NaN

3、浮点数的比较

1/3 === (1 - 2/3);  //false

这个不是javascript的设计缺陷,而是因为浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。所以要比较两个无限循环小数是否相等,只能计算它们之差的绝对值看是否小于某个阈值。

Math.abs(1/3 - (1 - 2/3)) < 0.0000001;  //true

4、形如javascript这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量的时候必须指定变量类型,如果赋值的时候类型不匹配就会报错。例如java就是静态语言。

5、strict模式

JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:

i = 10;        // i现在是全局变量

在同一个页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,将造成变量i互相影响,产生难以调试的错误结果。

使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内,同名变量在不同的函数体内互不冲突。

为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。

启用strict模式的方法是在JavaScript代码的第一行写上:

'use strict';

这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。

不用“var”申明的变量会被视为全局变量,为了避免这一缺陷,所有的javascript代码都应该使用strict模式。

6、多行字符串

多行字符串用’\n’来分隔比较麻烦,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 `……` 表示:

`这是

一个

多行

字符串`;

7、操作字符串

获取字符串中某个字符,可以采用数组下标索引的方式

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”

8、数组

直接给array的length赋一个新值会导致array的大小变化:

var array = [1,2,3];

array.length;  //3

array.length = 6;  //array变为[1,2,3,undefined,undefined,undefined]  undefined不显示

array.length = 2;  //array变为[1,2]

array可以通过索引把对应元素的值改为新值,对索引赋值可以直接修改这个array,但是如果赋值的索引超过了数组的范围,将会导致array大小的变化(大多数语言不允许直接改变数组大小,越界访问索引会报错。在编写代码的时候,不建议直接修改数组大小,在访问索引时,要确保索引不会越界):

var arr = [1,2,3];

var arr[1] = 4;    //arr变为[1,4,3]

var arr[5] = x;    //arr变为[1,4,3,undefined,undefined,’x’]

indexOf:

与String类似,Array也可以通过indexOf来获得一个指定元素的位置:

var arr = [10,20,’30’,’abc’];

arr.indexOf(10);    //元素10的索引为0

arr.indexOf(30);    //元素30没有找到,返回为-1

arr.indexOf(’30’);  //元素’30’的索引为2;

(4)slice:

类似String的subString(),截取Array的部分元素,返回一个新的Array(对于起止参数,包括开始索引但不包括结束索引):

var arr = [0,1,2,3,4,5,6,7];

arr.slice(0,3);    //从索引0开始到索引3结束,但是不包括索引3:[0,1,2]

arr.slice(3);      //从索引3开始到结束:[3,4,5,6,7]

var copy = arr.slice(); //从索引0开始到结束:[0,1,2,3,4,5,6,7],

//利用这一点,可以快速的复制数组

copy === arr;      //false

这里有一个指针的概念需要注意一下:

var arr2 = arr1;    //指针相同

var arr2 = arr1.slice();    //指针不同

可以自己运行一下以下这个小程序测试一下

var arr1 = [1,2,3,4,5,6,7];

var arr2 = arr1;

arr1[3] = 10;

alert(arr1 == arr2);

alert(arr2);

var arr3 = arr1.slice();

arr1[3] = 10;

alert(arr1 == arr3);

alert(arr3);

(5)push和pop:

push()向数组的末尾添加若干元素,返回值为数组的长度,pop()则把数组的最后一个元素删掉,返回值为删除的元素:

var arr = [1,2];

arr.push(‘A’,’B’);  //返回数组的长度为4,数组为[1,2,’A’,’B’]

arr.pop();      //返回’B’,数组为[1,2,’A’]

…          //连续pop

arr.pop();      //返回1,数组为[]

arr.pop()      //空数组继续pop不会报错,而是返回undefined,数组依然为[]

(6)unshift和shift:

unshift()向数组的头部添加元素,返回数组的长度,同push;shift()删除数组的第一个元素,返回值为删除的元素,同pop

(7)sort:

对当前Array进行排序,他会直接修改当前Array的元素位置,直接调用时按照默认顺序进行排序(也可以按照指定顺序进行排序)

var arr = [5,9,3,1];

arr.sort(); //arr为[1,3,5,9]

(8)reverse:反转数组元素

var arr = [‘A’,’B’,’C’];

arr.reverse();      //数组为[‘C’,’B’,’A’]

(9)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']

(10)concat:

把当前数组与另一个数组拼接起来,返回一个新的数组

注意:concat并没有修改当前数组,而是返回了一个新的数组,实际上concat()方法可以接收任意个元素和数组,并自动把数组拆开,然后全部添加到新的数组里面。

var arr = ['A', 'B', 'C'];

arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]

(11)join():

这是一个很实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串

var arr = ['A', 'B', 'C', 1, 2, 3];

arr.join('-'); // 'A-B-C-1-2-3'

你可能感兴趣的:(JS基础知识(一))