您的位置:首页 > Web前端 > JavaScript

项目笔记之Javascript常用方法split parseInt和 Date.parse总结

2013-04-09 19:29 666 查看
一、JavaScript split() 方法回顾

定义和用法

split() 方法用于把一个字符串分割成字符串数组。

语法

stringObject.split(separator,howmany)

参数 描述

separator 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。

howmany 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

返回值

一个字符串数组。该数组是通过在 separator 指定的边界处将字符串 stringObject 分割成子串创建的。返回的数组中的字串不包括 separator 自身。

但是,如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)。

提示和注释

注释:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

注释:String.split() 执行的操作与 Array.join 执行的操作是相反的。

二、浅谈 js中parseInt函数的解析

首先还是从很热门的实例parseInt("09")==0说起。

就是在用javascript的parseInt函数时,parseInt("08")或者 parseInt("09")返回的居然是0,而parseInt("01")...parseInt("07")都是正确的,一开始很难理解,后来发现出现这个问题的原因是当在前面有"0"时,javascript会认为这是一个八进制数,而"08"和"09"不是一个合法的八进制数,所以导致了那个问题,但是parseFloat不会存在这个问题。

parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制。

比如说parseInt("010",10)就是10进制的结果:10,parseInt("010",2)就是2进制的结果:2,parseInt("010",8)就是8进制的结果:8,parseInt("010",16)就是16进制的结果:16。

下面我来说说没有指定进制单位的时候,默认是10进制,但:如果是里面的Number是0开头的就认为是8进制的,如果是0x开头的就认为是16进制的。

parseInt("10")==>parseInt("010",10)===>10

parseInt("010")==>parseInt("010",8)==>8

parseInt("0x10")==>parseInt("010",16)==>16.

到这里很顺利.

许多事情不是想的那么顺利,比如说如果Number不是我们给的正常数字又怎么解释呢。查了些资料,是这样说的:

parseInt(Number)如果中间的Number遇到不是数字(0-9)的就中断往下解析,就只取不是数字之前的值去运算:

比如parseInt("100x"),就相当于parseInt("100")===》parseInt("100",10)==>100,

又如parseInt("0100x")===>parseInt("0100")===>parseInt("100",8)===>64.

到这里我们似乎无视了一个就是16进制中的有个x,它也不是数字,是不是遇到x也无视了呢。尝试下了发现在这个特殊处理了下,比如

parseInt("0x10")===>parseInt("10",16)===>16和最上面的结果相符,但却和我刚说的,不是字符就自动不解析就应该理解成parseInt("0")相违背。

这里就需要注意下,parseInt里面的Number是这样的,当如果第一个不是0且不是字符就认为是10进制,一切照旧执行,遇到字母就停下来。又当如果是第一个是0,后面那个就需要注意了,如果是x就继续往下走,这里的x不代表数值,只能和前面的0一起组成0x代表16进制的单位,后面的才按上面我们讲的遇到非数字停止解析的规则来。比如parseInt("0xt")==>parseInt("0x")==>parseInt("",16)就是NaN了。

总结下,parseInt(Number)里面的值:

如果是第一位不是0就遇到字母就停止解析,并把字母前面的值作为10进制去解析,如果第一个就是字母那么值就是空,空成了NaN,比如:

parseInt("a")==>parseInt("",10)==>NaN.

parseInt("10a")==>parseInt("10")==>parseInt("10",10)==>10;

如果第一位是0,且第2位不是x也和上面一样遇到字母就停止解析,并把字母前面的值作为8进制去解析,比如:

parseInt("0a")==>parseInt("0")==>parseInt("0",10)==>0.

PS:这个有点特殊,因为0a被解析成了0,还不具备看做是8进制的结构,下面那个就明显了。

parseInt("010a")==>parseInt("010")==>parseInt("10",8)==>8;

如果第一位是0,且第2位是x那后面也和上面一样遇到字母就停止解析,并把字母前面的值作为16进制去解析,比如:

parseInt("0xt")==>parseInt("",16)==>NaN.

parseInt("0x12t")==>parseInt("12",16)==>18.

三、JavaScript本地对象Date方法parse()与UTC()

Date 对象用于处理日期和时间。通过var myDate=new Date()创建,Date 对象会自动把当前日期和时间保存为其初始值。

1、JavaScript中Date.parse 函数用法

使用Date对象

支持脚本的浏览器含一个全局Date对象(事实上,每个窗口都有一个Date对象),这个对象总是存在的,随时随地都可被调用。Date对象是一个静态对象,当需要处理日期时,可以调用Date对象的构造函数,获取一个与特定事件和日期关联的Date对象实体。如果不带参数调用这个构造函数,格式如下:

var today=new Date();

Date对象取得了PC内部时钟的一个快照,并同时返回一个Date对象实例。

注意静态Date对象和Date对象实例的差别,后者包含一个实际的日期值。

在nebulizer,Date对象实例 的值是事件,已毫秒为单位,从格林尼治标准时区的1970年1月1日0时开始计算,这就是Date对象包含日期和时间信息的原因。

可以在Date对象构造函数中通过将特定的日期和事件作为参数,来得到这个时间信息的Date对象的快照。

var someDate=new Date("Month dd,yyyy hh:mm:ss");

var someDate=new Date("Month dd,yyyy")

var someDate=new Date(yy,mm,dd,hh,mm,ss)

var someDate=new Date(GMT milliseconds from 1/1/1970)

如果用户试图查看原始Date对象的内容,那么JavaScript脚本将把这个值转换为本地时区字符串。

当进行时钟计算时,PC时钟提供当前日期和时间。尽管JavaScript脚本仍然保留GMT时区Date对象的毫秒数,但通过Date对象实例的方法,可提取Date对象的组成部分。

Date对象的一些方法

方法 值的范围 说明

dateObject.getTime() 0~... 从GTM1970年1月1日0:00:00开始计算的毫秒数。

dateObject.getYear() 70~... 指定的年份减去1900,2000年后为4位数表示的年份。

dateObject.getFullYear() 1970~... 4位数年份,适用于版本4以上的浏览器。

dateObject.getMonth() 0~11 一年中的月份(1月为0)。

dateObject.getDate() 1~31 一月中的日期。

dateObject.getDay() 0~6 星期(星期日为0)。

dateObject.getHours() 0~23 一天中指定的小时数,采用24小时制。

dateObject.getMinutes() 0~59 指定小时内的分钟数。

dateObject.getSeconds() 0~59 指定分钟内的秒数。

dateObject.setTime(val) 0~... 从GTM1970年1月1日0:00:00开始计算的毫秒数。

dateObject.setYear(val) 70~... 指定的年份减去1900,2000年后为4位数表示的年份。

dateObject.setMonth(val) 0~11 一年中的月份(1月为0)。

dateObject.setDate(val) 1~31 一月中的日期。

dateObject.setDay(val) 0~6 星期(星期日为0)。

dateObject.setHours(val) 0~23 一天中的小时数,采用24小时值。

dateObject.setMinutes(val) 0~59 指定小时内的分钟数。

dateObject.setSecond(val) 0~59 指定小时内的秒数。

日期计算

执行日期计算要求在Date对象的毫秒值上进行处理,这是加,减和比较日期值的可靠方法。

2、JavaScript中Date.parse 函数用法

Date.parse方法是Date对象的一个静态方法,其作用是“解析一个包含日期的字符串,并返回该日期与 1970 年 1 月 1 日午夜之间所间隔的毫秒数”。格式为:

Date.parse(dateVal)

这个方法是很常用的,比如在验证输入日期是否存在时,可以使用它,如果是一个不存在的日期,则其返回值将是NaN,另外如果要比较两个日期的先后,或是计算两个日期相差的天数 ,都可以用到。

今天在使用它比较日期先后的时候遇到了一个奇怪的问题,是关于日期格式的,parse方法要求短日期可以使用“/”或“-”作为分隔符,但是必须用月/日/年的格式来表示,例如今天是“7/6/2008”或是“7-6-2008”,问题就出现在这里,当使用“7-6-2008”这种格式时,在 IE中可以正常解析,但在FireFox中,返回值却总是NaN。一开始以为是代码出现问题,检查以后才发现是浏览器的原因,后来将格式改为“7/6 /2008”后在IE和FF中都可以正常解析了。

parse()和UTC()两种方法(在Java中是静态方法)可以与创建Date对象的方法一起使用。parse()方法接受字符串为参数,把该字符串转换成日期值(即毫秒表示)。ECMA-26未定义parSe()方法接受的日期格式,所以这由JavaScript的实现特定,通常是地点特定的。例如,在美国,大多数实现支持下面的日期格式:

mm/dd/yyyy (例如6/13/2004)

mmmm dd,YYYY (例如January 12,2004)

例如,如果为2004年5月25日创建Date对象,可以使用parse()方法获得它的毫秒表示然后将该值传递给Date构造函数:

var d = new Date (Date.parse(May 25,2004”));

如果传递给parse()方法的字符串不能转换成日期,该函数返回NaN。

UTC()方法返回的也是日期的毫秒表示,但参数不同,是日期中的年、月、日、小时、分、秒和毫秒。使用该方法时,必须声明年和月,其他参数可选。设置月份时要格外注意,因为它的值是从O到11,O代表一月,11代表十二月,因此,要设置2004年2月5号,可以使用下列代码:

var d = new Date(Date.UTC(2004,1,5));

这里,1表示二月,即第二个月。这与用户设置日期输入的值不同。可以想到,其他可能存在这种例外情况的参数是小时,采用24时制,而不是12时制。因此,要设置2004年2月5号下午l:05分,可以使用下面的代码:

var d = new Date(Date.UTC(2004,1,5,13,5));

创建日期的第二种方法是直接声明UTC()方法接受的参数:

var d = new Date(2004,1,5);

声明参数的顺序相同,(除了年和月外)它们不必都出现。

后记:jQuery中get/each函数的用法参见http://api.jquery.com/jQuery.get/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: