关于JavaScript的一些不得不知道的事儿
Posted Candy-Yao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于JavaScript的一些不得不知道的事儿相关的知识,希望对你有一定的参考价值。
1、javascript不区分整数和浮点数,统一用Number表示。
2、NaN
这个特殊的Number与所有其他值都不相等,包括它自己:
NaN===NaN; //false
唯一能判断NaN
的方法是通过isNaN()
函数:
isNaN(NaN); //true
3、null
表示一个“空”的值,它和0
以及空字符串\'\'
不同,0
是一个数值,\'\'
表示长度为0的字符串,而null
表示“空”。而undefined
表示值未定义。
4、JavaScript的数组可以包括任意数据类型。
[1, 2, 3.14, \'Hello\', null, true];
另一种创建数组的方法是通过Array()
函数实现:
new Array(1, 2, 3); // 创建了数组[1, 2, 3]
5、启用strict模式的方法是在JavaScript代码的第一行写上:
‘use strict’;
6、由于多行字符串用\\n
写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示:
`这是一个 多行 字符串`;
运行结果如下:
7、模板字符串
要把多个字符串连接起来,可以用+
号连接:
var name = \'小明\'; var age = 20; var message = \'你好, \' + name + \', 你今年\' + age + \'岁了!\'; alert(message);
如果有很多变量需要连接,用+
号就比较麻烦。这时用ES6的模板字符串很方便。
var name = \'小明\'; var age = 20; var message = `你好, ${name}, 你今年${age}岁了!`; alert(message);
运行结果完全相同:
8、JavaScript为字符串提供了一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串:
*针对字符串:
toUpperCase()
把一个字符串全部变为大写;
toLowerCase()
把一个字符串全部变为小写;
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\'
*针对数组:
要取得Array
的长度,直接访问length
属性;
与String类似,Array
也可以通过indexOf()
来搜索一个指定的元素的位置;
slice()
就是对应String的substring()
版本,它截取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()
传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array
var arr = [\'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\']; var aCopy = arr.slice(); aCopy; // [\'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\'] aCopy === arr; // false
push()
向Array
的末尾添加若干元素,pop()
则把Array
的最后一个元素删除掉;
如果要往Array
的头部添加若干元素,使用unshift()
方法,shift()
方法则把Array
的第一个元素删掉;
sort()
可以对当前Array
进行排序,它会直接修改当前Array
的元素位置,直接调用时,按照默认顺序排序;
reverse()
把整个Array
的元素给掉个个,也就是反转;
splice()
方法是修改Array
的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素;
concat()
方法把当前的Array
和任意多个Array
连接起来,并返回一个新的Array;形如【arr.concat(arr1,arr2)】
9、JavaScript对象(访问对象的属性注意事项:)
若属性是一个有效的变量名,则用 . 来表示(object.prop);如属性为一个无效变量名的话,就要用 [ ‘XXX’] 来访问,不能用点。
var xiaoming={ name:"小敏", age=12 } xiaoming.name; //小敏
var xiaohong={ name:"小花", \'middle-school\' :\'No.1 Middle School\' } xiaohong[\'middle-school\']; //No.1 Middle School
10、JavaScript规定,访问不存在的属性不报错,而是返回undefined。
11、由于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
操作符。
\'name\' in xiaoming; // true \'grade\' in xiaoming; // false
注意:如果in
判断一个属性存在,这个属性不一定是xiaoming
的,它可能是xiaoming
继承得到的。如果--要判断一个属性是否是xiaoming
自身拥有的,而不是继承得到的,可以用hasOwnProperty()
方法
var xiaoming = {
name: \'小明\'
};
xiaoming.hasOwnProperty(\'name\'); // true
xiaoming.hasOwnProperty(\'toString\'); // false
12、for...in 循环,把JavaScript对象的熟悉依次循环出来。
var person={ name:\'小明\', age:19, class:\'one\' } for(var key in person){ console.log(key);//name, age, class }
要过滤掉对象继承的属性,用hasOwnProperty()
来实现
for(var key in person){
if(person.hasOwnProperty(key)){
console.log(key);
}
}
13、while循环
for
循环在已知循环的初始和结束条件时非常有用。有时for
循环容易让人看不清循环的逻辑,此时用while
循环更佳。
while
循环只有一个判断条件,条件满足,就不断循环,条件不满足时则退出循环。比如我们要计算100以内所有奇数之和,可以用while循环实现:
var s=0; var n=99; while(n>0){ s=s+n; n=n-2; }
14、do { ... } while()
循环,它和while
循环的唯一区别在于,不是在每次循环开始的时候判断条件,而是在每次循环完成的时候判断条件。
注意:用do { ... } while()
循环要小心,循环体会至少执行1次,而for
和while
循环则可能一次都不执行。
以上是关于关于JavaScript的一些不得不知道的事儿的主要内容,如果未能解决你的问题,请参考以下文章