Math 对象用于执行数学任务。
Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数new Math()
Math是静态对象,因此始终用作Math.方法,而不是用作创建new Math对象((动态)实例方法)的方法。
【1】Math.random() 获取一个随机数,默认取值为[0, 1)的浮点数
Math.random() // 范围是[0, 1)
Math.random()*30 // 范围是[0, 30)
Math.random()*30+1 // 范围是[1, 31)
【2】Math.round(值) 四舍五入得到一个整数
【3】Math.ceil(值) 向上取整
【4】Math.floor(值) 向下取整
【5】Math.pow(底数,指数) 即底数的几次方
底数**指数 或 Math.pow(底数,指数)
console.log(Math.pow(10,2)); //100
console.log(10**3); //1000
【6】Math.sqrt(值) 开平方
【7】Math.max(值) 返回最大值
【8】Math.min(值) 返回最小值
【9】Math.abs(值) 取绝对值
【10】Math.PI 得到一个圆周率 3.141592653589793
【11】.Math.log()方法返回一个数的自然对数(以e为底)。
【12】.Math.acos()方法返回数字的反余弦(以弧度为单位),其值介于0和PI弧度之间。
JS数组求和的常用方法总结,6种方法
function sum(arr) {
var len = arr.length;
if(len == 0){
return 0;
} else if (len == 1){
return arr[0];
} else {
return arr[0] + sum(arr.slice(1));
}
}
sum([ 1, 2, 3, 4 ])
2.常规循环:
function sum(arr) {
var s = 0;
for (var i=arr.length-1; i>=0; i--) {
s += arr[i];
}
return s;
}
sum([ 1, 2, 3, 4 ])
3.forEach遍历:
function sum(arr) {
var s = 0;
arr.forEach(function(val, idx, arr) {
s += val;
});
return s;
sum([ 1, 2, 3, 4 ])
};
4.函数式编程reduce
function sum(arr) {
return arr.reduce(function (pre, value) {
return pre + value;
});
}
var arr = [1, 2, 3, 4];
console.log(sum(arr)); // 10
5.eval()方法
语法:eval(string)
eval是JS中最强大的方法之一,它就像一个完整的ECMAScript解析器,它会根据ECMAScript语句对字符串进行解析和计算。
function sum(arr) {
return eval(arr.join("+"));
}
var arr = [1, 2, 3, 4];
console.log(sum(arr)); // 10
6.通过原型对象扩展内置对象方法(即给Array增加方法)
Array.prototype.sum = function () {
var sum = 0;
for (var i = 0; i < this.length; i++) {
sum += this[i];
}
return sum;
};
var arr = [1, 2, 3, 4];
console.log(arr.sum()); // 10
JavaScript 获取数组元素索引方法
indexOf(数组元素) 作用就是返回该数组元素的索引号 ,从前面开始查找
1.它只返回第一个满足条件的索引号
2.它如果在该数组里面找不到元素,则返回的是 -1
charAt() 方法可返回指定位置的字符。
//index必需。表示字符串中某个位置的数字,即字符在字符串中的下标。
语法:stringObject.charAt(index)
js计算数组中每个元素出现的次数:(2种方法)
var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var countedNames = names.reduce((obj, name) => {
if (name in obj) {
obj[name]++
} else {
obj[name]=1
}
return obj
}, {})
//reduce的第二个参数就是obj的初始值
console.log(countedNames)
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
function getEleNums(data) {
var map = {}
for (i = 0; i < data.length; i++) {
var key = data[i]
if (map[key]) {
map[key] += 1
} else {
map[key] = 1
}
}
return map
}
var data = ['b','a','c','a','b','b','b','c','c','a','c','a','a','a','b','c']
console.log(getEleNums(data))
while循环语句和if条件语句:
var c=5
while (c>2) {
console.log(8); //1个8 因为第一次就break
c--
break;
}
var c=5
while (c>2) {
console.log(8); //3个8 因为等条件为false时自动结束循环
c--
}
var c=5
while (c>2) {
console.log(8); //3个8
c--
continue
}
while (sum==idsum&&index<id-1) {
repeatnum++
break //这要是不加break,上面的条件就会一直是true,死循环导致浏览器崩了
}
while (sum==idsum&&index<id-1) {
repeatnum++
continue//用continue会死循环导致浏览器崩了,因为continue结束本次循环语句,进入下一次循环,下次循环还是true
}
不止是while要注意break/continue的使用,其他循环语句比如ror循环(if条件语句是不允许也不需要break/continue)同样要注意break/continue的使用,break跳出当前整个循环语句,不再执行后面的循环。而continue结束本次循环语句,进入下一次循环
let a=5
while (a>2) {
console.log(55); //55 只会执行一次,因为执行完第一次循环就break跳出循环了
a--
break
}
do/while:循环至少执行一次,即便条件为 false,因为代码块是在条件语句判断前执行
do…while 循环是 while 循环的变体。在检查while()条件是否为真之前,该循环首先会执行一次do{}之内的语句,然后在while()内检查条件是否为真,如果条件为真的话,就会重复do…while这个循环,直至while()为假。
let a=5
do {
a--
console.log(555); //3次555
} while (a>2);
let a=5
do {
a--
console.log(555); //1次555
break
} while (a>2);
注:while是循环语句,像for;而if语句是纯条件语句,条件判断时用if,虽然while有时也可以充当条件语句去判断,但是不符合编程逻辑。(区别:if条件语句会且只会执行一次,while循环可以不执行,也可以执行1次或者多次)