一Qping
它是用来查网l是否通畅或者网l连接速度的命令。作Z个生zd|络上的理员或者黑客来_ping命o是第一个必L握的DOS命oQ它 所利用的原理是q样的:|络上的机器都有唯一定的IP地址Q我们给目标IP地址发送一个数据包Q对方就要返回一个同样大的数据包,Ҏq回的数据包? 们可以确定目标主机的存在Q可以初步判断目标主机的操作pȝ{。下面就来看看它的一些常用的操作。先看看帮助吧,在DOSH口中键入:ping /? 回RQ。所C的帮助画面。在此,我们只掌握一些基本的很有用的参数可以了Q下同)?
-t 表示不间断向目标IP发送数据包Q直到我们强q其停止。试惻I如果你?00M的宽带接入,而目标IP?6K的小猫,那么要不了多久,目标IP因为承受不了这么多的数据而掉U,呵呵Q一ơ攻dq么单的实现了?
-l 定义发送数据包的大,默认?2字节Q我们利用它可以最大定义到65500字节。结合上面介l的-t参数一起用,会有更好的效果哦?
-n 定义向目标IP发送数据包的次敎ͼ默认?ơ。如果网l速度比较慢,3ơ对我们来说也浪费了不少旉Q因为现在我们的目的仅仅是判断目标IP是否存在Q那么就定义Zơ吧?
说明一下,如果-t 参数?-n参数一起用,ping命o׃攑֜后面的参Cؓ标准Q比?ping IP -t -n 3"Q虽然用了-t参数Q但q不是一直ping下去Q而是只ping 3ơ。另外,ping命o不一定非得ping IPQ也可以直接pingL域名Q这样就可以得到L的IP?
下面我们举个例子来说明一下具体用法?
q里time=2表示从发出数据包到接受到q回数据包所用的旉?U,从这里可以判断网l连接速度的大。从TTL的返回值可以初步判断被pingL的操作系l,之所以说"初步判断"是因个值是可以修改的。这里TTL=32表示操作pȝ可能?win98?nbsp;
Q小知识Q如果TTL=128Q则表示目标L可能是Win2000Q如果TTL=250Q则目标L可能是UnixQ?nbsp;
至于利用ping命o可以快速查扑ֱ域网故障Q可以快速搜索最快的QQ服务器,可以对别行pingd……q些靠大家自己发挥了?
二,nbtstat
该命令用TCP/IP上的NetBIOS昄协议l计和当前TCP/IPq接Q用这个命令你可以得到q程L的NETBIOS信息Q比如用户名、所属的工作l、网卡的MAC地址{。在此我们就有必要了解几个基本的参数?
-a 使用q个参数Q只要你知道了远E主机的机器名称Q就可以得到它的NETBIOS信息Q下同)?
-A q个参数也可以得到远E主机的NETBIOS信息Q但需要你知道它的IP?nbsp;
-n 列出本地机器的NETBIOS信息?
当得CҎ的IP或者机器名的时候,可以用nbtstat命o来进一步得到对方的信息了,q又增加了我们入늚保险pL?
三,netstat
q是一个用来查看网l状态的命oQ操作简便功能强大?
-a 查看本地机器的所有开攄口,可以有效发现和预防木马,可以知道机器所开的服务等信息Q如??
q里可以看出本地机器开放有FTP服务、Telnet服务、邮件服务、WEB服务{。用法:netstat -a IP?nbsp;
-r 列出当前的\׃息,告诉我们本地机器的网兟뀁子|掩码等信息。用法:netstat -r IP?nbsp;
四,tracert
跟踪路由信息Q用此命o可以查出数据从本地机器传输到目标L所l过的所有途径Q这Ҏ们了解网l布局和结构很有帮助。如??
q里说明数据从本地机器传输到192.168.0.1的机器上Q中间没有经qQ何中转,说明q两台机器是在同一D局域网内。用法:tracert IP?
五,net
q个命o是网l命令中最重要的一个,必须透彻掌握它的每一个子命o的用法,因ؓ它的功能实在是太强大了,q简直就?微Y为我们提供的最好的入R工具。首先让我们来看一看它都有那些子命令,键入net /?回R如图6?nbsp;
在这里,我们重点掌握几个入R常用的子命o?
net view
使用此命令查看远E主机的所以共享资源。命令格式ؓnet view \IP。
net use
把远E主机的某个׃n资源影射为本地盘W,囑Ş界面方便使用Q呵c命令格式ؓnet use x: \IP\sharename。上面一个表C把192.168.0.5IP的共享名为magic的目录媄ؓ本地的Z盘。下面表C和192.168.0.7 建立IPC$q接Qnet use \IP\IPC$ "password" /user:"name"Q,
建立了IPC$q接后,呵呵Q就可以上传文g了:copy nc.exe \192.168.0.7\admin$Q表C把本地目录下的nc.exe传到q程LQ结合后面要介绍到的其他DOS命o可以实现入侵了?
net start
使用它来启动q程L上的服务。当你和q程L建立q接后,如果发现它的什么服务没有启动,而你又想利用此服务怎么办?׃用这个命令来启动吧。用法:net start servernameQ如?Q成功启动了telnet服务?
net stop
入R后发现远E主机的某个服务手脚Q怎么办?利用q个命o停掉ok了,用法和net start同?
net user
查看和帐h关的情况Q包括新建帐戗删除帐戗查看特定帐戗激zd戗帐L用等。这Ҏ们入侉|很有利的Q最重要的,它ؓ我们克隆帐户提供了前提。键入不带参数的net userQ可以查看所有用P包括已经用的。下面分别讲解?nbsp;
1Qnet user abcd 1234 /addQ新Z个用户名为abcdQ密码ؓ1234的帐P默认为userl成员?nbsp;
2Qnet user abcd /delQ将用户名ؓabcd的用户删除?nbsp;
3Qnet user abcd /active:noQ将用户名ؓabcd的用L用?nbsp;
4Qnet user abcd /active:yesQ激zȝ户名为abcd的用戗?nbsp;
5Qnet user abcdQ查看用户名为abcd的用L情况
net localgroup
查看所有和用户l有关的信息和进行相x作。键入不带参数的net localgroup卛_出当前所有的用户l。在入Rq程中,我们一般利用它来把某个帐户提升为administratorl帐Pq样我们利用q个帐户 可以控制整个远E主Z。用法:net localgroup groupname username /add?
现在我们把刚才新建的用户abcd加到administratorl里MQ这时候abcd用户已经是超U管理员了,呵呵Q你可以再用net user abcd来查看他的状态,和图10q行比较可以看出来。但q样太明显了Q网一看用h况就能漏出破l,所以这U方法只能对付菜鸟网,但我们还得知 道。现在的手段都是利用其他工具和手D克隆一个让|管看不出来的超U管理员Q这是后话。有兴趣的朋友可以参照《黑客防Uѝ第30期上的《由入p析隆? 戗一文?
net time
q个命o可以查看q程L当前的时间。如果你的目标只是进入到q程L里面Q那么也许就用不到这个命令了。但单的入R成功了,N只是看看 吗?我们需要进一步渗透。这pq程L当前的时间都需要知道,因ؓ利用旉和其他手D(后面会讲刎ͼ可以实现某个命o和程序的定时启动Qؓ我们q一步入 侉|好基。用法:net time \IP?
六,at
q个命o的作用是安排在特定日期或旉执行某个特定的命令和E序Q知道net time的重要了吧?Q。当我们知道了远E主机的当前旉Q就可以利用此命令让其在以后的某个时_比如2分钟后)执行某个E序和命令。用法:at time command \computer?
表示??5分时Q让名称为a-01的计机开启telnet服务Q这里net start telnet即ؓ开启telnet服务的命令)?
七,ftp
大家对这个命令应该比较熟悉了吧?|络上开攄ftp的主机很多,其中很大一部分是匿名的Q也是说Q何h都可以登陆上厅R现在如果你扫到了一 台开?ftp服务的主机(一般都是开?1端口的机器)Q如果你q不会用ftp的命令怎么办?下面q出基本的ftp命o使用Ҏ?nbsp;
首先在命令行键入ftp回RQ出现ftp的提C符Q这时候可以键?help"来查看帮助(MDOS命o都可以用此Ҏ查看其帮??
大家可能看到了,q么多命令该怎么用?其实也用不到那么多,掌握几个基本的就够了?
首先是登陆过E,q就要用到open了,直接在ftp的提C符下输?open LIP ftp端口"回R卛_Q一般端口默认都?1Q可以不写。接着是输入合法的用户名和密码进行登陆了Q这里以匿名ftpZ介绍?
用户名和密码都是ftpQ密码是不显C的。当提示**** logged inӞp明登陆成功。这里因为是匿名登陆Q所以用hCZؓAnonymous?
接下来就要介l具体命令的使用Ҏ了?
dir 跟DOS命o一P用于查看服务器的文gQ直接敲上dir回RQ就可以看到此ftp服务器上的文件?nbsp;
cd q入某个文g夏V?nbsp;
get 下蝲文g到本地机器?nbsp;
put 上传文g到远E服务器。这p看远Eftp服务器是否给了你可写的权限了Q如果可以,呵呵Q该怎么 利用׃多说了,大家p由发挥去吧?nbsp;
delete 删除q程ftp服务器上的文件。这也必M证你有可写的权限?nbsp;
bye 退出当前连接?nbsp;
quit 同上?nbsp;
八,telnet
功能强大的远E登陆命令,几乎所有的入R者都喜欢用它Q屡试不爽。ؓ什么?它操作简单,如同使用自己的机器一P只要你熟悉DOS命oQ在成功 ? administratorw䆾q接了远E机器后Q就可以用它来干你想q的一切了。下面介l一下用方法,首先键入telnet回RQ再键入help查看 其帮助信息?
然后在提C符下键入open IP回RQ这时就出现了登陆窗口,让你输入合法的用户名和密码,q里输入M密码都是不显C的?
当输入用户名和密码都正确后就成功建立了telnetq接Q这时候你在q程L上具有了和此用户一L权限Q利用DOS命o可以实C惛_的事情了。这里我使用的超U管理员权限登陆的。
到这里ؓ止,|络DOS命o的介l就告一D落了,q里介绍的目的只是给菜鸟|管一个印象,让其知道熟悉和掌握网lDOS命o的重要性。其实和|? l有关的DOS命oq远不止q些Q这里只是抛砖引玉,希望能对q大菜鸟|管有所帮助。学好DOS对当好网有很大的帮助,特别的熟l掌握了一些网l的 DOS命o?nbsp;
另外大家应该清楚QQ何h要想q入pȝQ必d有一个合法的用户名和密码Q输入法漏洞差不多绝q了吧)Q哪怕你拿到帐户的只有一个很的权限Q你也可以利用它来达到最后的目的。所以坚x灭空口oQ给自己的帐户加上一个强壮的密码Q是最好的防M弱口令入늚Ҏ?nbsp;
最后,p的说一句,培养良好的安全意识才是最重要的?nbsp;
=========================================
开?#8594;q行→命o集锦
winver---------查Windows版本
wmimgmt.msc----打开windows理体系l构(WMI)
wupdmgr--------windows更新E序
wscript--------windows脚本宿主讄
write----------写字?nbsp;
winmsd---------pȝ信息
wiaacmgr-------扫描仪和照相机向?nbsp;
winchat--------XP自带局域网聊天
mem.exe--------昄内存使用情况
Msconfig.exe---pȝ配置实用E序
mplayer2-------易widnows media player
mspaint--------d?nbsp;
mstsc----------q程桌面q接
mplayer2-------媒体播放?nbsp;
magnify--------攑֤镜实用程?nbsp;
mmc------------打开控制?nbsp;
mobsync--------同步命o
dxdiag---------查DirectX信息
drwtsn32------ pȝȝ
devmgmt.msc--- 讑֤理?nbsp;
dfrg.msc-------盘片整理E序
diskmgmt.msc---盘理实用E序
dcomcnfg-------打开pȝlg服务
ddeshare-------打开DDE׃n讄
dvdplay--------DVD播放?nbsp;
net stop messenger-----停止信服务
net start messenger----开始信使服?nbsp;
notepad--------打开C?nbsp;
nslookup-------|络理的工具向?nbsp;
ntbackup-------pȝ备䆾和还?nbsp;
narrator-------屏幕"讲述?
ntmsmgr.msc----Ud存储理?nbsp;
ntmsoprq.msc---Ud存储理员操作请?nbsp;
netstat -an----(TC)命o查接?nbsp;
syncapp--------创徏一个公文包
sysedit--------pȝ配置~辑?nbsp;
sigverif-------文g{验证E序
sndrec32-------录音?nbsp;
shrpubw--------创徏׃n文g?nbsp;
secpol.msc-----本地安全{略
syskey---------pȝ加密Q一旦加密就不能解开Q保护windows xppȝ的双重密?nbsp;
services.msc---本地服务讄
Sndvol32-------音量控制E序
sfc.exe--------pȝ文g查器
sfc /scannow---windows文g保护
tsshutdn-------60U倒计时关机命?nbsp;
tourstart------xp介(安装完成后出现的漫游xpE序Q?nbsp;
taskmgr--------d理?nbsp;
eventvwr-------事g查看?nbsp;
eudcedit-------造字E序
explorer-------打开资源理?nbsp;
packager-------对象包装E序
perfmon.msc----计算机性能监测E序
progman--------E序理?nbsp;
regedit.exe----注册?nbsp;
rsop.msc-------l策略结果集
regedt32-------注册表编辑器
rononce -p ----15U关?nbsp;
regsvr32 /u *.dll----停止dll文gq行
regsvr32 /u zipfldr.dll------取消ZIP支持
cmd.exe--------CMD命o提示W?nbsp;
chkdsk.exe-----Chkdsk盘?nbsp;
certmgr.msc----证书理实用E序
calc-----------启动计算?nbsp;
charmap--------启动字符映射?nbsp;
cliconfg-------SQL SERVER 客户端网l实用程?nbsp;
Clipbrd--------剪脓板查看器
conf-----------启动netmeeting
compmgmt.msc---计算机管?nbsp;
cleanmgr-------垃圾整理
ciadv.msc------索引服务E序
osk------------打开屏幕键盘
odbcad32-------ODBC数据源管理器
oobe/msoobe /a----查XP是否Ȁz?nbsp;
lusrmgr.msc----本机用户和组
logoff---------注销命o
iexpress-------木马捆绑工具Q系l自?nbsp;
Nslookup-------IP地址侦测?nbsp;
fsmgmt.msc-----׃n文g夹管理器
utilman--------辅助工具理?nbsp;
gpedit.msc-----l策?/p>
转自 http://blog.csdn.net/ccsbb/archive/2010/01/27/5261954.aspx
mysql> UPDATE EACONTACTGROUPS A
SET GROUPNAME=(SELECT CONCAT(B.GROUPNAME,'-',A.GROUPNAME) FROM EACONTACTGROUPS B WHERE B.CORPID=A.CORPID AND B.USERID=A.USERID AND B.GROUPID=A.PARENTGROUPID)
WHERE A.PARENTGROUPID IS NOT NULL;
ERROR 1093 (HY000): You can't specify target table 'A' for update in FROM clause
上面是目前MYSQL5.0仍然有的限制Q文档中_
In general, you cannot modify a table and select from the same table in a subquery. For example, this limitation applies to statements of the following forms:
DELETE FROM t WHERE ... (SELECT ... FROM t ...);UPDATE t ... WHERE col = (SELECT ... FROM t ...);{INSERT|REPLACE} INTO t (SELECT ... FROM t ...);
Exception: The preceding prohibition does not apply if you are using a subquery for the modified table in the
FROM
clause. Example:
UPDATE t ... WHERE col = (SELECT (SELECT ... FROM t...) AS _t ...);
Here the prohibition does not apply because a subquery in the
FROM
clause is materialized as a temporary table, so the relevant rows in
t
have already been selected by the time the update to
t
takes place. 依据文档Q改成下面的样子p了:
mysql> UPDATE EACONTACTGROUPS A
SET GROUPNAME=(SELECT CONCAT(B.GROUPNAME,'-',A.GROUPNAME) FROM ( SELECT GROUPNAME,CORPID,USERID,GROUPID,PARENTGROUPID FROM EACONTACTGROUPS) B
WHERE B.CORPID=A.CORPID AND B.USERID=A.USERID AND B.GROUPID=A.PARENTGROUPID)
WHERE A.PARENTGROUPID IS NOT NULL;
Query OK, 16 rows affected (0.01 sec)
Rows matched: 16 Changed: 16 Warnings: 0
?今天写一个删除语句时扑ֈ的一点资?解决了一个简单的删除语句.呵呵,以后注意?
原句:delete from menu_item where parent_id =(select menu_item_id from menu_item where menu_data like '%manageVendors%');
修改?delete from menu_item where parent_id =(select temp.menu_item_id from (select m.menu_item_id,m.menu_data from menu_item m) temp where temp.menu_data like '%manageVendors%');
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
setcookie() 定义一个和其余?HTTP 标头一起发送的 cookie。和其它标头一Pcookie 必须在脚本的M其它输出之前发送(q是协议限制Q。这需要将本函数的调用攑ֈM输出之前Q包?<html> ? <head> 标签以及MI格。如果在调用 setcookie() 之前有Q何输出,本函数将p|q返?FALSE。如? setcookie() 函数成功q行Q将q回 TRUE。这q不说明用户是否接受?cookie?/p>
? ?PHP 4 P可以用输出缓存来在调用本函数前输出内容,代h是把所有向览器的输出都缓存在服务器,直到下命令发送它们。可以在代码中? ob_start() ?ob_end_flush() 来实现这L功能Q或者通过修改 php.ini 中的 output_buffering 配置选项来实玎ͼ也可以通过修改服务器配|文件来实现?/p>
除了 name 外,其它所有参数都是可选的。可以用I字W串Q?"Q替换某参数以蟩q该参数。因为参?expire 是整型,不能用空字符串掉q,可以用零Q?Q来代替 。下面的说明?setcookie() 的每一个参数都q行了解释。可以对?Netscape cookie 规范以了?setcookie() 的每一个参数的l节以及通过阅读 RFC 2965 了解 HTTP cookie 的工作方式?/p>
1. setcookie() 参数详解
参数 说明 举例
name Cookie 的名?/em>Q?nbsp; 使用 $_COOKIE['cookiename'] 调用名ؓ cookiename ?cookie?br />
value Cookie 的?/em>Q此g存在客户端,不要用来保存敏感数据?nbsp; 假定 name ?'cookiename'Q可以通过 $_COOKIE['cookiename'] 取得其倹{?br />
expire Cookie q期的时?/em>Q这是个 Unix 旉戻I即从 Unix U元开始的U数。换而言之,通常?
time() 函数再加上秒数来讑֮ cookie 的失效期。或者用 mktime()来实现?nbsp; time()+60*60*24*30 设?
cookie 30 天后失效。如果未讑֮Qcookie 会在会话结束后Q一般是览器关闭)失效?br />
path Cookie 在服务器端的有效路径Q?nbsp; 如果该参数设?'/' 的话Qcookie 在整个 domain 内有效,如果设ؓ '/foo/'Qcookie 只?domain 下的 /foo/ 目录及其子目录内有效Q例?/foo/bar/。默认gؓ讑֮ cookie 的当前目录?br />
domain ?cookie 有效的域?/em>Q?nbsp; 要 cookie 能在?example.com 域名下的所有子域都有效的话Q该参数应该设ؓ '.example.com'。虽?. q不必须的,但加上它会兼Ҏ多的览器。如果该参数设ؓ www.example.com 的话Q就只在 www 子域内有效。细节见 Cookie 规范中的 tail matching?br />
secure 指明Q?cookie 是否仅通过安全?HTTPS q接传送。当设成 TRUE Ӟcookie 仅在安全的连接中被设|。默认gؓ FALSE?nbsp; 0 ?1
?cookie 被设|后Q便可以在其它页面通过 $_COOKIE ?$HTTP_COOKIE_VARS 数组取得其倹{需要注意的是,autoglobals ?$_COOKIE 形式适用?PHP 4.1.0 或更高版本。? $HTTP_COOKIE_VARS 则从 PHP 3 起就可以使用。Cookie 的g会被保存?$_REQUEST 数组中?/p>
? 如果 PHP 的选项 register_globals 被设?on 的话Qcookie 的g然会被斌到变量内。在下面的例子中Q?TestCookie 会被注册Q但是仍然推荐?$_COOKIE 数组?/p>
常见~陷Q?/strong>
* Cookies 不会在设|它的本는效,要测试一?cookie
是否被成功的讑֮Q可以在其到期之前通过另外一个页面来讉K其倹{过期时间是通过参数 expire 来设|的。可以简单地使用
print_r($_COOKIE); 来调试现有的 cookies?br />
* Cookie 必须用和讑֮时的同样的参数才能删除。如果其g个空字符Ԍ或者是 FALSEQƈ且其它的参数都和前一ơ调?setcookie 时相同,那么所指定名称?cookie 会在远E客L被删除?br />
* ׃?cookie 的D?FALSE 会客户端尝试删除这?cookieQ所以要?cookie 上保?
TRUE ?FALSE 时不应该直接使用 boolean |而应该用 0 来表C?FALSEQ用 1 来表C?TRUE
* 可以?cookie 的名U设|成一个数l,但是数组 cookie
中的每个元素的值将会被单独保存在用Lpȝ中。考虑使用 explode() 函数用多个名U和D定一?cookie。不推荐?
serialize() 用于此目的,因ؓ它可能会D一个安全漏z?/p>
?PHP 3 中,在同一?PHP 脚本中多ơ?setcookie() 来设|? cookieQ将会按照倒序的方式来分别执行Q如果想要在插入另外一?cookie 之前删除一?cookieQ要把插入放到删除之前。自 PHP 4 P多次调用 setcookie() 则是按照序来执行的?/p>
下面一些例子说明了如何发?cookieQ?/p>
例子 1. setcookie() 发送例?br /> $value = 'something from somewhere';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value,time()+3600); /* expire in 1 hour */
setcookie("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);
注意 cookie 中值的部分在发送的时候会被自动用 urlencode ~码q在接收到的时候被自动解码q把Dl与自己同名? cookie 变量。如果不惌样ƈ且在使用 PHP 5 的话Q可以用 setrawcookie() 来代ѝ下面这个简单的例子可以得到刚才所讑֮?cookie 的|
<?php
// 输出单独?cookie
echo $_COOKIE["TestCookie"];
echo $HTTP_COOKIE_VARS["TestCookie"];
// 另一个调试的Ҏ是输出所有的 cookie
print_r($_COOKIE);
?>
要删?cookie 需要确保它的失效期是在q去Q才能触发浏览器的删除机制。下面的例子说明了如何删除刚才设|的 cookieQ?/p>
例子 2. setcookie() 删除例子
// 过期时间设Z时?br />
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
也可以通过?cookie 名称中用数l符h讑֮数组 cookieQ可以设定多?cookie 作ؓ数组单元Q在脚本提取 cookie 时所有的值都攑֜一个数l中Q?/p>
例子 3. setcookie() 中用数l的例子
<?php
// 讑֮ cookie
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");
// h面后,昄出来
if (isset($_COOKIE['cookie'])) {
foreach ($_COOKIE['cookie'] as $name => $value) {
echo "$name : $value <br />\n";
}
}
?>
上例输出:
three : cookiethree
two : cookietwo
one : cookieone
? 下面的一?RFC 也具参考h|RFC 2109 ?RFC 2695?/p>
注意 expire 参数的接受的?Unix 旉戻I而不是日期格?Wdy, DD-Mon-YYYY HH:MM:SS GMTQ这是因?PHP 在内部进行了转换?/p>
expire 是与客户端的旉相比较,和服务器旉可能不同?/p>
? ?Microsoft Internet Explorer 4 Service Pack 1 不能正确处理讑֮?path ?cookie?/p>
Netscape Communicator 4.05 ?Microsoft Internet Explorer 3.x 不能正确处理没有讑֮ path ?time ?cookie?/p>
参见 header()Qsetrawcookie()
Ҏ主要有三U?
转换函数、强制类型{换、利用js变量q型{换?
1. 转换函数
js提供了parseInt()和parseFloat()两个转换函数。前者把D{换成整数Q后者把D{换成点数。只有对Stringcd调用q些ҎQ这两个函数才能正确q行Q对其他cdq回的都是NaN(Not a Number)?
在判断字W串是否是数字值前QparseInt()和parseFloat()都会仔细分析该字W串。parseInt()Ҏ首先查看位置0处的字符Q? 判断它是否是个有效数字;如果不是Q该Ҏ返回NaNQ不再l执行其他操作。但如果该字W是有效数字Q该Ҏ查看位|?处的字符Q进行同L试? q一q程持l到发现非有效数字的字符为止Q此时parseInt()把该字W之前的字符串{换成数字?
例如Q如果要把字W串 "1234blue "转换成整敎ͼ那么parseInt()返?234Q因为当它检到字符bӞ׃停止过E。字W串中包含的数字字面量会被正{换ؓ数字Q因? 字符?"0xA "会被正确转换为数?0。不q,字符?"22.5 "被转换?2Q因为对于整数来_数Ҏ无效字符。一些示例如下:
parseInt("1234blue"); //returns 1234
parseInt("0xA"); //returns 10
parseInt("22.5"); //returns 22
parseInt("blue"); //returns NaN
parseInt()Ҏq有基模式,可以把二q制、八q制、十六进制或其他Mq制的字W串转换成整数。基是由parseInt()Ҏ的第二个参数指定的,所以要解析十六q制的|需如下调用parseInt()ҎQ?br />
parseInt("AF", 16); //returns 175
当然Q对二进制、八q制Q甚臛_q制Q默认模式)Q都可以q样调用parseInt()ҎQ?br />
parseInt("10", 2); //returns 2
parseInt("10", 8); //returns 8
parseInt("10", 10); //returns 10
如果十进制数包含前导0Q那么最好采用基?0Q这h不会意外地得到八q制的倹{例如:
parseInt("010"); //returns 8
parseInt("010", 8); //returns 8
parseInt("010", 10); //returns 10
在这D代码中Q两行代码都把字W串 "010 "解析成了一个数字。第一行代码把q个字符串看作八q制的|解析它的方式与第二行代码Q声明基Cؓ8Q相同。最后一行代码声明基Cؓ10Q所以iNum3最后等?0?
parseFloat()Ҏ与parseInt()Ҏ的处理方式相|从位|?开始查看每个字W,直到扑ֈW一个非有效的字Wؓ止,然后把该字符之前
的字W串转换成数字。不q,对于q个Ҏ来说Q第一个出现的数Ҏ有效字符。如果有两个数点,W二个小数点被看作无效的,parseFloat()
Ҏ会把q个数点之前的字符串{换成数字。这意味着字符?"22.34.5 "被解析?2.34?br />
使用parseFloat()Ҏ的另一不同之处在于Q字W串必须以十q制形式表示点敎ͼ而不能用八进制Ş式或十六q制形式。该
Ҏ会忽略前?Q所以八q制?908被解析?08。对于十六进制数0xAQ该Ҏ返回NaNQ因为在点CQx不是有效字符。此外,parseFloat()也没有基模式?
下面是用parseFloat()Ҏ的示例:
parseFloat("1234blue"); //returns 1234.0
parseFloat("0xA"); //returns NaN
parseFloat("22.5"); //returns 22.5
parseFloat("22.34.5"); //returns 22.34
parseFloat("0908"); //returns 908
parseFloat("blue"); //returns NaN
2. 强制cd转换
q可使用强制cd转换Qtype castingQ处理{换值的cd。用强制类型{换可以访问特定的|即它是另一U类型的?br />
ECMAScript中可用的3U强制类型{换如下:
Boolean(value)——把l定的D{换成Boolean型;
Number(value)——把l定的D{换成数字Q可以是整数或QҎQ;
String(value)——把l定的D{换成字符丌Ӏ?br />
用这三个函数之一转换|创Z个新|存放由原始值直接{换成的倹{这会造成意想不到的后果?br />
当要转换的值是臛_有一个字W的字符丌Ӏ非0数字或对象(下一节将讨论q一点)ӞBoolean()函数返回true。如果该值是I字W串、数??ff0000或nullQ它返回false?
可以用下面的代码D|试Boolean型的强制cd转换?
Boolean(""); //false – empty string
Boolean("hi"); //true – non-empty string
Boolean(100); //true – non-zero number
Boolean(null); //false - null
Boolean(0); //false - zero
Boolean(new Object()); //true – object
Number()的强制类型{换与parseInt()和parseFloat()Ҏ的处理方式相|只是它{换的是整个|而不是部分倹{还记得 吗,parseInt()和parseFloat()Ҏ只{换第一个无效字W之前的字符Ԍ因此 "4.5.6 "被转换?"4.5 "。用Number()q行强制cd转换Q?"4.5.6 "返回NaNQ因为整个字W串g能{换成数字。如果字W串D被完整地转换QNumber()判断是调用parseInt()Ҏq是调用 parseFloat()Ҏ。下表说明了对不同的D用Number()Ҏ会发生的情况Q?
用 ?nbsp; l ?br />
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number( "5.5 ") 5.5
Number( "56 ") 56
Number( "5.6.7 ") NaN
Number(new Object()) NaN
Number(100) 100
最后一U强制类型{换方法String()是最单的Q因为它可把MD{换成字符丌Ӏ要执行q种强制cd转换Q只需要调用作为参C递进来的值的 toString()ҎQ即?转换?nbsp; "1 "Q把true转换?"true "Q把false转换?"false "Q依此类推。强制{换成字符串和调用toString()Ҏ的唯一不同之处在于Q对null或undefined值强制类型{换可以生成字W串而不? 发错误:
var s1 = String(null); //"null"
var oNull = null;
var s2 = oNull.toString(); //won’t work, causes an error
3. 利用js变量q型{?/strong>
举个例子,一看,׃明白了?br />
<script>
var str= '012.345 ';
var x = str-0;
x = x*1;
</script>
上例利用了js的弱cd的特点,只进行了术q算Q实C字符串到数字的类型{换,不过q个Ҏq是不推荐的?