本文主要是介绍JavaScript基础:Math,Date,String常用方法。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
JavaScript中对象主要有3种:自定义对象,内置对象,浏览器对象。
- 自定义对象:就是自己定义的对象。
- 内置对象:就是JavaScript自带的一些对象,比如前面聊的数组等,说白了就是自己可以直接用的对象以及其方法。其实前面聊的数组就是内置对象,所以可以调用其内置对象的方法。
- 浏览器对象,这个后面会聊的的,聊BOM的聊。
本篇就简单的聊一下内置对象Math和Date两个常用的对象,以及常用的方法,当然如果需要使用更加详细的方法可以看一下官方文档。
Math
Math 是一个内置对象,它拥有一些数学常数属性和数学函数方法。Math 不是一个函数对象。 Math 用于 Number 类型。它不支持 BigInt。
与其他全局对象不同的是,Math 不是一个构造器。Math 的所有属性与方法都是静态的。引用圆周率的写法是 Math.PI,调用正余弦函数的写法是 Math.sin(x),x 是要传入的参数。Math 的常量是使用 JavaScript 中的全精度浮点数来定义的。官网文档
聊一下常用的方法来演示一下具体的使用。
属性或方法 | 描述 |
---|---|
Math.PI | 圆周率 |
Math.floor() | 向下取整 |
Math.ceil() | 向上取整 |
Math.round() | 返回一个数字四舍五入后最接近的整数 |
Math.abs() | 绝对值 |
Math.max()/min() | 求最大或最小值 |
Math.random() | 返回一个随机浮点数:0<=x<1 |
Math.PI
其实这个就是Math’对象的一个属性,当然不止这个,只是简单的说这个而已。
Math.floor()
返回小于或等于一个给定数字的最大整数。不过可以理解 **Math.floor()**
为向下取整。
格式:
Math.floor(x)
演示:
可以看出Math.floor
取整数其会靠拢数值较小的整数,不会采用四舍五入。
Math.ceil()
返回大于或等于一个给定数字的最小整数。不过其靠拢的是数值大的整数。
Math.ceil(x)
演示:
可以看出是Math.ceil
是向大的整数靠拢的,不会采用四舍五入。
Math.round()
函数返回一个数字四舍五入后最接近的整数。
可以看出正数的话四舍五入但是如果负数的话5就向大值靠拢,而6才会向小靠拢。
Math.abs()
函数返回指定数字 “x“ 的绝对值。
格式:
Math.abs(x);
Math.max()/min()
两个使用方式一样,只不过一个是求最大,一个求最小,只列举一个:求最大值;
返回一组数中的最大值,格式如下
Math.max(value1[,value2, ...])
演示:
Math.random()
函数返回一个浮点数, 伪随机数在范围从0到小于1,也就是说,从0(包括0)往上,但是不包括1(排除1),然后您可以缩放到所需的范围。实现将初始种子选择到随机数生成算法;它不能被用户选择或重置。
格式:
Math.random()
演示:
然而在工作中可能有其它的需求,这个在官方文档种也可了几个函数方法:
// 得到一个两数之间的随机数 返回了一个在指定值之间的随机数。这个值不小于 min(有可能等于),并且小于(不等于)
function getRandomArbitrary(min, max) {return Math.random() * (max - min) + min;
}// 得到一个两数之间的随机整数 返回了一个在指定值之间的随机整数。这个值不小于 min (如果 min 不是整数,则不小于 min 的向上取整数),且小于(不等于)max。
function getRandomInt(min, max) {min = Math.ceil(min);max = Math.floor(max);return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值
}// 得到一个两数之间的随机整数,包括两个数在内 随机结果需要同时包含最小值和最大值function getRandomIntInclusive(min, max) {min = Math.ceil(min);max = Math.floor(max);return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值
}
Date
创建一个新Date对象的唯一方法是通过new 操作符,例如:let now = new Date();
若将它作为常规函数调用(即不加 new 操作符),将返回一个字符串,而非 Date 对象。
构造方法:
new Date(); // huod
new Date(value);
new Date(dateString);
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
官网的例子:
var today = new Date();
var birthday = new Date('December 17, 1995 03:24:00');
var birthday = new Date('1995-12-17T03:24:00');
var birthday = new Date(1995, 11, 17);
var birthday = new Date(1995, 11, 17, 3, 24, 0);
不过这样需要注意以下如果用数字的话,会有一个问题,先举例子,然后在解释。
var day1 = new Date(1995, 11, 17);
var day2 = new Date('1995-11-17');
可以看出如果使用数字的话,其月份比实际要大一个月,因为月份数字的话是从0开始的。所以最好实例化的时候一般更习惯用字符串,毕竟不需要再进行一次换算。
Date.now();
获得当前日期的时间戳。
演示:
当然时间戳也可以如下得到:
格式:
new Date().valueOf();
// 或者
new Date().getTime();
// 或者
+new Date();
通过new得到对象后的一些get方法
这些方法其实字面意思,所以不在一一举例。
String
String 说白了就是一个字符串的类对象,再说这个之前,先看一个例子。
var a="avd";
a.length;
声明的变量a,然后直接赋值为基本数据类型,为什么还有属性?属性不是对象才有可能有的吗?
其实这个涉及道一个包装基本包装类型。说白了就是将一个基本数据包装成一个对象的类。其内部有的是如下操作:
// 类似这样一个操作
var a;
tem=new String("avd");
a=tem;
//
tem=null;
为了方便操作基本数据类型,JavaScript提供了三个特殊的引用类型:String,Number,Boolean。
再JavaScript种的字符串创建之后,其不会变的,这个和java很类似,其实就是堆栈的理解,不想再重复这个堆栈了,可以在我java的分栏里面理解一下。这个主要是为了引出结论:一般不建议字符串进行多次的拼接,会影响性能。
IndexOf和LastIndexOf()
这两个方法再数组种也有:
indexof格式:
str.indexOf(searchValue [, fromIndex])
**fromIndex可选:**数字表示开始查找的位置。可以是任意整数,默认值为 0。如果 fromIndex 的值小于 0,或者大于 str.length ,那么查找分别从 0 和str.length 开始。(译者注: fromIndex 的值小于 0,等同于为空情况; fromIndex 的值大于或等于 str.length ,那么结果会直接返回 -1 。)举个例子,‘hello world’.indexOf(‘o’, -5) 返回 4 ,因为它是从位置0处开始查找,然后 o 在位置4处被找到。另一方面,‘hello world’.indexOf(‘o’, 11) (或 fromIndex 填入任何大于11的值)将会返回 -1 ,因为开始查找的位置11处,已经是这个字符串的结尾了。
var a='abcdahd
a.indexOf('a');// 0 第一个a的位置
a.indexOf('a',2);//4 动字符串种字符串种第二个开始(本质是第三毕竟是从0开始的)
indexOf方法区分大小写。
官网的例子:
//统计一个字符串中某个字母出现的次数
var str = 'To be, or not to be, that is the question.';
var count = 0;
var pos = str.indexOf('e');while (pos !== -1) {count++;pos = str.indexOf('e', pos + 1);
}console.log(count); // displays 4
lastIndexOf的格式:
str.lastIndexOf(searchValue[, fromIndex])
fromIndex可选: 待匹配字符串searchValue的开头一位字符从 str的第fromIndex位开始向左回向查找。fromIndex默认值是 +Infinity。如果 fromIndex >= str.length ,则会搜索整个字符串。如果 fromIndex < 0 ,则等同于 fromIndex == 0。
返回字符
charAt()
从一个字符串中返回指定的字符。
格式:
str.charAt(index) //一个介于0 和字符串长度减1之间的整数。 (0~length-1)如果没有提供索引,charAt() 将使用0。
演示:
var a='abcd';
a.charAt(10); // '' 空字符
a.charAt();//'a' 如果不写数值默认是
a.charAt(3);//'d'
charcodeAt()
**charCodeAt()**
方法返回 0
到 65535
之间的整数,表示给定索引处的 UTF-16 代码单元;
格式:
str.charCodeAt(index);
演示:
var a='abcd';
undefined
a.charCodeAt(10);// NaN 没这个字符 所以为非数
a.charCodeAt();//97 默认第一个 a对应的就是97
a.charCodeAt(2);//99
str[index]
这个是新特性,不过用法更简单。
演示:
var a='abcd';
a[1];//'b'
a[10];//undefined 这个不像是charAt 返回空而是返回未定义
a[];// 会报错,必须有数值
concat
这个而是string对象带有的一个方法,就是拼接字符串,格式如下:
str.concat(str2, [, ...strN])
演示:
var a="";
a.concat(1,'d','a');// '1da'
不过一般开发中更习惯的是使用+
连接。
substr
**substr()**
方法返回一个字符串中从指定位置开始到指定字符数的字符。格式如下:
str.substr(start[, length])
- start
开始提取字符的位置。如果为负值,则被看作 strLength + start,其中 strLength 为字符串的长度(例如,如果 start 为 -3,则被看作 strLength + (-3))。 - length
可选。提取的字符数。
演示:
var a='abcd';
a.substr(1);// 长度不写默认等于剩下字符串长度 'bcd'
a.substr(-1)// 'd' 负数等 4-1
a.substr(-2)// 'cd' 负数等 4-2
a.substr(-2,1)// 'c' 负数等 4-2 默认剩下长度有两个字符,而长度写1所以只有一个字符
a.substr(1,10)//'bcd' 截取字符串等一长度过长 没有意义
a.substr(11,13);// ''
substring(start,end)
**substring()
**方法返回一个字符串在开始索引到结束索引之间的一个子集, 或从开始索引直到字符串的末尾的一个子集。
格式:
str.substring(indexStart[, indexEnd])
-
indexStart
需要截取的第一个字符的索引,该索引位置的字符作为返回的字符串的首字母。如果是负数那就是从0开始。
-
indexEnd 可选。
一个 0 到字符串长度之间的整数,以该数字为索引的字符不包含在截取的字符串内。如果是负数就为0;
这个和substr不同的是第二个参数的意义,一个是表示截取的长度,一个表示截取到索引。
演示:
var a='abcd';
a.substring(-1);// 'abcd'
a.substring(2);// 'cd'
a.substring(2,1)//'b' 可以倒着来
a.substring(2,3);// 'c'
slice(start,end)
slice()
方法提取某个字符串的一部分
格式:
str.slice(beginIndex[, endIndex])
-
beginIndex
从该索引(以 0 为基数)处开始提取原字符串中的字符。如果值为负数,会被当做 strLength + beginIndex 看待,这里的strLength 是字符串的长度(例如, 如果 beginIndex 是 -3 则看作是:strLength - 3)
-
endIndex 可选。
在该索引(以 0 为基数)处结束提取字符串。如果省略该参数,slice() 会一直提取到字符串末尾。如果该参数为负数,则被看作是 strLength + endIndex,这里的 strLength 就是字符串的长度(例如,如果 endIndex 是 -3,则是, strLength - 3)。
其中一个潜在规则那就是beginIndex<endIndex .
这个和sbstring比较的话,可以将负数变得有意义了,而不是substring种的那样负数都是0.其拥有过的意义有点像是substr了。
演示:
var a='abcd';a.slice(-1);// 'd'
a.slice(2,5);// 'cd'
a.slice(2,1);//''
a.slice(-2,-1);//'c'
a.slice(-1,-2);//''
replace
替换字符串种的值为另一个值。
格式如下:
str.replace(regexp|substr, newSubStr|function)
可以是正则表达式和函数。
补充一下JavaScript中正则如何声明:
//使用RegExp对象创建
var regObj = new RegExp("(^\s+)|(\s+$)","g");
//使用直接字面量创建
var regStr = /(^\s+)|(\s+$)/g;
注意:其中 g 表示全文匹配,与之相关的还有 i 和m,i 表示匹配时忽略大小写,m 表示多行匹配,如果多个条件同时使用时,则写成:gmi
举例
function testA(a){return "F";
}
var a='abc1';
a.replace('a','G'); // 'Gbc1'
a.replace(/\d+/g,'R'); //'abcR'
a.replace('c',TestA);// 'abcF' 因为正则匹配没有没有设置分组,可以直接调用函数,如果有参数会根据正则匹配返回的参数依次赋值
split
前面再聊数组的时候可以通过join将数组变成字符串,自然字符串也可以转换数组。
格式:
str.split([separator[, limit]])
-
separator
指定表示每个拆分应发生的点的字符串。separator 可以是一个字符串或正则表达式。 如果纯文本分隔符包含多个字符,则必须找到整个字符串来表示分割点。如果在str中省略或不出现分隔符,则返回的数组包含一个由整个字符串组成的元素。如果分隔符为空字符串,则将str原字符串中每个字符的数组形式返回。
-
limit
一个整数,限定返回的分割片段数量。当提供此参数时,split 方法会在指定分隔符的每次出现时分割该字符串,但在限制条目已放入数组时停止。如果在达到指定限制之前达到字符串的末尾,它可能仍然包含少于限制的条目。新数组中不返回剩下的文本。
演示:
var a="bacadaea";
a.split('a');//['b', 'c', 'd', 'e', '']
a.split('a',2);//['b', 'c' ]
这篇关于JavaScript基础:Math,Date,String常用方法。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!