(1)使⽤ Number() ⽅法,前提是所包含的字符串不包含不合法字符。
(2)使⽤ parseInt() ⽅法,parseInt() 函数可解析⼀个字符串,并返回⼀个整数。还可以设置要解析的数字的基数。当基数的值为 0,或没有设置该参数时,parseInt() 会根据
string 来判断数字的基数。
(3)使⽤ parseFloat() ⽅法,该函数解析⼀个字符串参数并返回⼀个浮点数。
(4)使⽤ + 操作符的隐式转换。
30. 如何 将 浮 点 数点左边的数每三位添加⼀个逗号,如如何 将 浮 点 数 点 左 边 的 数 每三位添加⼀个逗号,如 12000000.11 转化为『转化为『 12,000,000.11』』 ?
function format(number) {
return number && number.replace(/(?!^)(?=(\d{3})+\.)/g, ",");
}
31. 常⽤ 正 则 表 达式常⽤ 正 则 表达式
// (1)匹配 16 进制颜⾊值
var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
// (2)匹配⽇期,如 yyyy-mm-dd 格式
var regex = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
// (3)匹配 qq 号
var regex = /^[1-9][0-9]{4,10}$/g;
// (4)⼿机号码正则
var regex = /^1[34578]\d{9}$/g;
// (5)⽤户名正则
var regex = /^[a-zA-Z\$][a-zA-Z0-9_\$]{4,16}$/;
32. 如何 实 现 数 组的随机排序?如何 实现数组的随机排序?
// (1)使⽤数组 sort ⽅法对数组元素随机排序,让 Math.random() 出来的数与 0.5 ⽐较,如果⼤于就返回 1 交换位置,如果⼩于就返回 -1,不交换位置。
function randomSort(a, b) {
return Math.random() > 0.5 ? -1 : 1;
}
// 缺点:每个元素被派到新数组的位置不是随机的,原因是 sort() ⽅法是依次⽐较的。
// (2)随机从原数组抽取⼀个元素,加⼊到新数组
function randomSort(arr) {
var result = [];
while (arr.length > 0) {
var randomIndex = Math.floor(Math.random() * arr.length);
result.push(arr[randomIndex]);
arr.splice(randomIndex, 1);
}
return result;
}
// (3)随机交换数组内的元素(洗牌算法类似)
function randomSort(arr) {
var index,
randomIndex,
temp,
len = arr.length;
for (index = 0; index < len; index++) {
randomIndex = Math.floor(Math.random() * (len - index)) + index;
temp = arr[index];
arr[index] = arr[randomIndex];
arr[randomIndex] = temp;
}
return arr;
}
// es6
function randomSort(array) {
let length = array.length;
if (!Array.isArray(array) || length <= 1) return;
for (let index = 0; index < length - 1; index++) {
let randomIndex = Math.floor(Math.random() * (length - index)) + index;
[array[index], array[randomIndex]] = [array[randomIndex], array[index]];
}
return array;
}
33. javascript 创建对象的⼏种⽅式 ?创建 对 象 的 ⼏ 种 ⽅ 式 ?
我们⼀般使⽤字⾯量的形式直接创建对象,但是这种创建⽅式对于创建⼤量相似对象的时候,会产⽣⼤量的重复代码。但 js和⼀般的⾯向对象的语⾔不同,在 ES6 之前它没有类
的概念。但是我们可以使⽤函数来进⾏模拟,从⽽产⽣出可复⽤的对象创建⽅式,我了解到的⽅式有这么⼏种:
(1)第⼀种是⼯⼚模式,⼯⼚模式的主要⼯作原理是⽤函数来封装创建对象的细节,从⽽通过调⽤函数来达到复⽤的⽬的。但是它有⼀个很⼤的问题就是创建出来的对象⽆法
和某个类型联系起来,它只是简单的封装了复⽤代码,⽽没有建⽴起对象和类型间的关系。
(2)第⼆种是构造函数模式。js 中每⼀个函数都可以作为构造函数,只要⼀个函数是通过 new 来调⽤的,那么我们就可以把它称为构造函数。执⾏构造函数⾸先会创建⼀个对
象,然后将对象的原型指向构造函数的 prototype 属性,然后将执⾏上下⽂中的 this 指向这个对象,最后再执⾏整个函数,如果返回值不是对象,则返回新建的对象。因为 this
的值指向了新建的对象,因此我们可以使⽤ this 给对象赋值。构造函数模式相对于⼯⼚模式的优点是,所创建的对象和构造函数建⽴起了联系,因此我们可以通过原型来识别对