php有个很方便的用法是在定义函数时可以直接给参数设默认值,如:
function simue ($a=1,$b=2){
return $a+$b;
}
echo simue(); //输出3
echo simue(10); //输出12
echo simue(10,20); //输出30
但js却不能这么定义,如果写function simue(a=1,b=2){}会提示缺少对象。
js函数中有个储存参数的数组arguments ,所有函数获得的参数会被编译器挨个保存到这个数组中。于是我们的js版支持参数默认值的函数可以通过另外一种变通的方法实现,修改上例:
function simue (){
var a = arguments[0] ? arguments[0] : 1;
var b = arguments[1] ? arguments[1] : 2;
return a+b;
}
alert( simue() ); //输出3
alert( simue(10) ); //输出12
alert( simue(10,20) ); //输出30
摘自:http://www.cnblogs.com/RightDear/archive/2013/06/26/3156652.html
——————————————————————————————————————————————————————————
自己实践:
fastEchoMessage("编号"+equipNum+"温度设失败。","red");
function simue ($a=1,$b=2){
return $a+$b;
}
echo simue(); //输出3
echo simue(10); //输出12
echo simue(10,20); //输出30
但js却不能这么定义,如果写function simue(a=1,b=2){}会提示缺少对象。
js函数中有个储存参数的数组arguments ,所有函数获得的参数会被编译器挨个保存到这个数组中。于是我们的js版支持参数默认值的函数可以通过另外一种变通的方法实现,修改上例:
function simue (){
var a = arguments[0] ? arguments[0] : 1;
var b = arguments[1] ? arguments[1] : 2;
return a+b;
}
alert( simue() ); //输出3
alert( simue(10) ); //输出12
alert( simue(10,20) ); //输出30
摘自:http://www.cnblogs.com/RightDear/archive/2013/06/26/3156652.html
——————————————————————————————————————————————————————————
自己实践:
fastEchoMessage("编号"+equipNum+"温度设失败。","red");
PHP连接Mysql时候用如何使用上try catch实现捕获连接上的错误简单示例。
Php/Js/Shell/Go jackxiang 2015-5-20 11:39
背景:对于书上一些连接mysql的例子,总是像写c语言一样,一行一行的,直接写下去,确实好看明白,但是在实际使用中,如果暴露出错误到前端页面是不太好的,这时候需要try catch来捕获这些错误,对于mysql的连接句柄的密码是否正确可以用if直接判断其返回值,再用throw new exception("Sorry,could not connect to mysql.");而对于一些非密码的网络及数据库,得用上catch,网上有一篇文章就有这样的类似介绍。
自己简单实践如下,如果密码错误则会捕获并报如下信息,而不是直接抛出:
一)来个设置温度是否成功了,并无从db查询的数据返回的:
密码错会报如下错,前端用json去解析判断并提示用户即可,自己也好查错不是:
{"opt":"setTemperatureValue","status":-1,"errMsg":"Sorry,could not connect to mysql."}
二)来个有数据查询并返回的简单示例:
(1)错误结果:
{"opt":"getTemperatureValue","status":-1,"errMsg":"Sorry,could not connect to mysql."}
(2)正确结果:
{"opt":"getTemperatureValue","status":-1,"curTempOne":"40.2","curTempTwo":"38.6","curTempSetOne":"35.5","curTempSetTwo":"55.4"}
原始代码参考来源:http://bbs.csdn.net/topics/240078038
自己简单实践如下,如果密码错误则会捕获并报如下信息,而不是直接抛出:
一)来个设置温度是否成功了,并无从db查询的数据返回的:
密码错会报如下错,前端用json去解析判断并提示用户即可,自己也好查错不是:
{"opt":"setTemperatureValue","status":-1,"errMsg":"Sorry,could not connect to mysql."}
二)来个有数据查询并返回的简单示例:
(1)错误结果:
{"opt":"getTemperatureValue","status":-1,"errMsg":"Sorry,could not connect to mysql."}
(2)正确结果:
{"opt":"getTemperatureValue","status":-1,"curTempOne":"40.2","curTempTwo":"38.6","curTempSetOne":"35.5","curTempSetTwo":"55.4"}
原始代码参考来源:http://bbs.csdn.net/topics/240078038
这个没有加上禁用cache,容易出现修改代码chrome不去读取:
/usr/local/scripts/restartChrome.sh
再次对第一个的代码修正:
在那个pi用户下,crontab -e
10秒启动一次:
* * * * * /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 10; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 20; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 30; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 40; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 50; /usr/local/scripts/restartChrome.sh >/dev/null
简介:
Solution of how to disable Cache in Chromimum browser.
转载请注明出处。
There's an option which does not appear in chromium's manual page --- "-disk-cache-dir".
This option specifies where the disk cache should be stored.
Hence, under Linux, we can set the disk-cache-dir to /dev/null. In that way, the cache will be disabled, and all contents will be read from the Internet directly.
Here is what the modified chromium-browser-chromium.desktop looks like:
[Desktop Entry]
Name=Chromium Type=Application
Comment=Open-source version of Google Chrome web browser
Exec=chromium-browser %U --disk-cache-dir=/dev/null 2>/dev/null
TryExec=chromium-browser
Icon=chromium-browser
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;
Why I need to disable file cache?
Well, on my machine, when chromium browser starts up, it keeps reading cache and take a long time to show the homepage.
So I decided to disable it.
来自:http://www.cnblogs.com/yangyingchao/archive/2011/07/30/2178385.html
/usr/local/scripts/restartChrome.sh
再次对第一个的代码修正:
在那个pi用户下,crontab -e
10秒启动一次:
* * * * * /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 10; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 20; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 30; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 40; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 50; /usr/local/scripts/restartChrome.sh >/dev/null
简介:
Solution of how to disable Cache in Chromimum browser.
转载请注明出处。
There's an option which does not appear in chromium's manual page --- "-disk-cache-dir".
This option specifies where the disk cache should be stored.
Hence, under Linux, we can set the disk-cache-dir to /dev/null. In that way, the cache will be disabled, and all contents will be read from the Internet directly.
Here is what the modified chromium-browser-chromium.desktop looks like:
[Desktop Entry]
Name=Chromium Type=Application
Comment=Open-source version of Google Chrome web browser
Exec=chromium-browser %U --disk-cache-dir=/dev/null 2>/dev/null
TryExec=chromium-browser
Icon=chromium-browser
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;
Why I need to disable file cache?
Well, on my machine, when chromium browser starts up, it keeps reading cache and take a long time to show the homepage.
So I decided to disable it.
来自:http://www.cnblogs.com/yangyingchao/archive/2011/07/30/2178385.html
背景:听哥们说了个工具ngrok,可以让本机配置的web服务在外网访问,抱着将信将疑的态度试了试,发现还真的可以。下面记录下我自己的安装步骤,另外谈下自己还有些疑问的地方。
作为一个 web 开发者,有时候,你需要将你本地正在开发中的网站远程展示给别人看,例如让别人评价下你的设计,协助调试等。
之前我能想到的办法,就是在自己的 VPS 上搭建一个测试站点,将开发代码部署上去。
今天,发现了 ngrok 这个神奇,再也不用这么麻烦了!
假如,你的本地站点运行在 8000 端口。
注册 ngrok 后,你会得到一串授权码。根据提示,运行下面的命令:
ngrok
-authtoken xsYgK978pmB_PDC0hWx2 8000
注意: 这个授权码只是第一次使用时需要。ngrok 会记住。下次使用时,只需要 ngrok 8000 就 OK 啦。
此时终端界面上会给你两个公网 url:
Forwarding
http://59ea2510.ngrok.com
-> 127.0.0.1:8000
Forwarding
https://59ea2510.ngrok.com
-> 127.0.0.1:8000
然后,你就可以选择其中一个,发送给对方,他就可以看到你的本地网站啦!
有木有觉得世界豁然开朗了起来?
From:http://blog.csdn.net/ft305977550/article/details/21398591
ngrok 2.0 发布,该版本提升了可靠性、性能,支持 TLS 隧道,支持泛子域名、反向 TCP 地址以及重新 Host 头信息等等,详细介绍请看这里。
目前 ngrok 2.0 的源码还没有开放出来,可通过下面地址访问 ngrok 1.0 的源码:
https://github.com/inconshreveable/ngrok
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。
来自:http://www.oschina.net/news/61495/ngrok-2-0-released
http://blog.csdn.net/gebitan505/article/details/39497779
参考资料网站:http://blog.csdn.net/liuxiyangyang/article/details/22922265
使用ngrok将树莓派web服务映射到公网:
作为一个 web 开发者,有时候,你需要将你本地正在开发中的网站远程展示给别人看,例如让别人评价下你的设计,协助调试等。
之前我能想到的办法,就是在自己的 VPS 上搭建一个测试站点,将开发代码部署上去。
今天,发现了 ngrok 这个神奇,再也不用这么麻烦了!
假如,你的本地站点运行在 8000 端口。
注册 ngrok 后,你会得到一串授权码。根据提示,运行下面的命令:
ngrok -authtoken xsYgK978pmB_PDC0hWx2 8000
注意: 这个授权码只是第一次使用时需要。ngrok 会记住。下次使用时,只需要 ngrok 8000 就 OK 啦。
此时终端界面上会给你两个公网 url:
Forwarding http://59ea2510.ngrok.com -> 127.0.0.1:8000
Forwarding https://59ea2510.ngrok.com -> 127.0.0.1:8000
然后,你就可以选择其中一个,发送给对方,他就可以看到你的本地网站啦!
有木有觉得世界豁然开朗了起来?
来自:http://shumeipai.nxez.com/tag/ngrok
作为一个 web 开发者,有时候,你需要将你本地正在开发中的网站远程展示给别人看,例如让别人评价下你的设计,协助调试等。
之前我能想到的办法,就是在自己的 VPS 上搭建一个测试站点,将开发代码部署上去。
今天,发现了 ngrok 这个神奇,再也不用这么麻烦了!
假如,你的本地站点运行在 8000 端口。
注册 ngrok 后,你会得到一串授权码。根据提示,运行下面的命令:
ngrok
-authtoken xsYgK978pmB_PDC0hWx2 8000
注意: 这个授权码只是第一次使用时需要。ngrok 会记住。下次使用时,只需要 ngrok 8000 就 OK 啦。
此时终端界面上会给你两个公网 url:
Forwarding
http://59ea2510.ngrok.com
-> 127.0.0.1:8000
Forwarding
https://59ea2510.ngrok.com
-> 127.0.0.1:8000
然后,你就可以选择其中一个,发送给对方,他就可以看到你的本地网站啦!
有木有觉得世界豁然开朗了起来?
From:http://blog.csdn.net/ft305977550/article/details/21398591
ngrok 2.0 发布,该版本提升了可靠性、性能,支持 TLS 隧道,支持泛子域名、反向 TCP 地址以及重新 Host 头信息等等,详细介绍请看这里。
目前 ngrok 2.0 的源码还没有开放出来,可通过下面地址访问 ngrok 1.0 的源码:
https://github.com/inconshreveable/ngrok
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。
来自:http://www.oschina.net/news/61495/ngrok-2-0-released
http://blog.csdn.net/gebitan505/article/details/39497779
参考资料网站:http://blog.csdn.net/liuxiyangyang/article/details/22922265
使用ngrok将树莓派web服务映射到公网:
作为一个 web 开发者,有时候,你需要将你本地正在开发中的网站远程展示给别人看,例如让别人评价下你的设计,协助调试等。
之前我能想到的办法,就是在自己的 VPS 上搭建一个测试站点,将开发代码部署上去。
今天,发现了 ngrok 这个神奇,再也不用这么麻烦了!
假如,你的本地站点运行在 8000 端口。
注册 ngrok 后,你会得到一串授权码。根据提示,运行下面的命令:
ngrok -authtoken xsYgK978pmB_PDC0hWx2 8000
注意: 这个授权码只是第一次使用时需要。ngrok 会记住。下次使用时,只需要 ngrok 8000 就 OK 啦。
此时终端界面上会给你两个公网 url:
Forwarding http://59ea2510.ngrok.com -> 127.0.0.1:8000
Forwarding https://59ea2510.ngrok.com -> 127.0.0.1:8000
然后,你就可以选择其中一个,发送给对方,他就可以看到你的本地网站啦!
有木有觉得世界豁然开朗了起来?
来自:http://shumeipai.nxez.com/tag/ngrok
phpmyadmin出现空密码登录被禁止 (参见 允许空密码)的解决办法
Php/Js/Shell/Go jackxiang 2015-5-13 15:55
在Windows或者Linux下mysql安装后默认的密码为空,
又当我们又安装了mysql的管理工具
phpmyadmin后登陆时出现“空密码登陆呗禁止(参见允许密码为空)”。不能登录成功
解决办法如下:
1..要是你想用空密码,则将phpmyadmin下的
config.inc.php(根目录)或者config.default.php(根目录)
再则:libraries\config.default.php
(友情提示,由于版本不一样可能涉及的文件不同,基本为这三个文件)
中的$cfg['Servers'][$i]['AllowNoPassword'] = false;
改为$cfg['Servers'][$i]['AllowNoPassword'] = true;
2.要是你想设置密码不为空则将
$cfg['blowfish_secret'] = '123456'; // use here a value of your choice 你要设置的密码
又当我们又安装了mysql的管理工具
phpmyadmin后登陆时出现“空密码登陆呗禁止(参见允许密码为空)”。不能登录成功
解决办法如下:
1..要是你想用空密码,则将phpmyadmin下的
config.inc.php(根目录)或者config.default.php(根目录)
再则:libraries\config.default.php
(友情提示,由于版本不一样可能涉及的文件不同,基本为这三个文件)
中的$cfg['Servers'][$i]['AllowNoPassword'] = false;
改为$cfg['Servers'][$i]['AllowNoPassword'] = true;
2.要是你想设置密码不为空则将
$cfg['blowfish_secret'] = '123456'; // use here a value of your choice 你要设置的密码
经常给别人安装lnmp但是安装时间过长MYSQL密码容易忘记,在这里给大家介绍下如何更改密码。
1.停掉LNMP
/root/lnmp stop
2.修改MYSQL配置文件
vim /etc/my.cnf
光标到[mysqld]后面按一次“i”进入插入模式,然后按enter回车输入“skip-grant-tables”,在按ESC输入“:wq”回车即可保存。
3.启动LNMP
/root/lnmp start
4.修改密码
mysql
update user set Password = password ( '123456' ) where user = 'root' ;
exit
其中123456就是你的新密码,别忘记最后的分号要不然是不会更新好的。
MySql 5.7.19 忘记密码:
update mysql.user set authentication_string=PASSWORD('你的密码') where User='root';
flush privileges;
5.将刚才配置过的my.cnf修改回来,删除掉skip-grant-tables即可,这样安全。
6.重启LNMP。
/root/lnmp restart
来自:http://jinzhe.net/post/42.html
Windows是my.ini,Linux是my.cnf:
1.停掉LNMP
/root/lnmp stop
2.修改MYSQL配置文件
vim /etc/my.cnf
光标到[mysqld]后面按一次“i”进入插入模式,然后按enter回车输入“skip-grant-tables”,在按ESC输入“:wq”回车即可保存。
3.启动LNMP
/root/lnmp start
4.修改密码
mysql
update user set Password = password ( '123456' ) where user = 'root' ;
exit
其中123456就是你的新密码,别忘记最后的分号要不然是不会更新好的。
MySql 5.7.19 忘记密码:
update mysql.user set authentication_string=PASSWORD('你的密码') where User='root';
flush privileges;
5.将刚才配置过的my.cnf修改回来,删除掉skip-grant-tables即可,这样安全。
6.重启LNMP。
/root/lnmp restart
来自:http://jinzhe.net/post/42.html
Windows是my.ini,Linux是my.cnf:
背景:想开机启动树莓派的chrome浏览器。
网上有不少关于如何让Linux自动运行自己编写的脚本或者程序的方法,但是大多数都是把命令写到/etc/rc.local里,这样虽然能够实现随机运行,但是并不够灵活。不能像mysql,apache等服务一样能够使用service命令或者调用init.d下的脚本启动、关闭或者重启进程。例如,
service mysql restart service apache2 stop
或者
/etc/init.d/mysql restart /etc/init.d/apache2 stop
因为不同的Linux发行版本,对后台服务的处理方式不大一样,如redhat使用chkconfig来管理开机程序。所以下面的方法以debian类系统为例,如何写一个简单的开机启动脚本。所以,此方法适用于raspbian pi的系统。
以svn为例:
1.制作开机启动脚本svn_serve
#!/bin/sh
### BEGIN INIT INFO
# Provides: svn_serve
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start or stop the HTTP Proxy.
### END INIT INFO
case $1 in
start)
svnserve -d -r /home/pi/svn_repository
;;
stop)
killall svnserve
;;
*)
echo "Usage: $0 (start|stop)"
;;
esac
如果不加上面的注释,执行下面步骤3时,update-rc.d会报如下的警告信息
update-rc.d: warning: /etc/init.d/proxy missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
2.启动关闭服务
sudo service svn_serve start
sudo service svn_serve stop
3.让svn_serve开机启动
sudo update-rc.d svn_serve defaults
4.取消svn_serve的开机自动启动
sudo update-rc.d -f svn_serve remove
来自:http://www.cnblogs.com/mahang/p/3323474.html
网上有不少关于如何让Linux自动运行自己编写的脚本或者程序的方法,但是大多数都是把命令写到/etc/rc.local里,这样虽然能够实现随机运行,但是并不够灵活。不能像mysql,apache等服务一样能够使用service命令或者调用init.d下的脚本启动、关闭或者重启进程。例如,
service mysql restart service apache2 stop
或者
/etc/init.d/mysql restart /etc/init.d/apache2 stop
因为不同的Linux发行版本,对后台服务的处理方式不大一样,如redhat使用chkconfig来管理开机程序。所以下面的方法以debian类系统为例,如何写一个简单的开机启动脚本。所以,此方法适用于raspbian pi的系统。
以svn为例:
1.制作开机启动脚本svn_serve
#!/bin/sh
### BEGIN INIT INFO
# Provides: svn_serve
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start or stop the HTTP Proxy.
### END INIT INFO
case $1 in
start)
svnserve -d -r /home/pi/svn_repository
;;
stop)
killall svnserve
;;
*)
echo "Usage: $0 (start|stop)"
;;
esac
如果不加上面的注释,执行下面步骤3时,update-rc.d会报如下的警告信息
update-rc.d: warning: /etc/init.d/proxy missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
2.启动关闭服务
sudo service svn_serve start
sudo service svn_serve stop
3.让svn_serve开机启动
sudo update-rc.d svn_serve defaults
4.取消svn_serve的开机自动启动
sudo update-rc.d -f svn_serve remove
来自:http://www.cnblogs.com/mahang/p/3323474.html
背景:用树莓派修改进程数后,想重启后出现问题及解决。
apache2: bad user name ${APACHE_RUN_USER} 解决
开工后,发现有个虚拟机的apache没起来,调用apache2 -k start 后,提示如下内容:
apache2: bad user name ${APACHE_RUN_USER}
apache 启动时,是由读取 /etc/apache2/apache2.conf 读取了运行 User
而运行的user环境变量定义在/etc/apache2/envvars
而不是使用默认的登录账户启动,因此apache提供了
apache2ctl 工具来使用,调用
apache2ctl -k start
即可
______________________________________________________________________________________
pkill -9 apache
/usr/sbin/apache2 -k start
apache2: bad user name ${APACHE_RUN_USER}
/usr/sbin/apachectl -k start
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
启动成功!
vi +178 /etc/apache2/apache2.conf
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start
Syntax error on line 178 of /etc/apache2/apache2.conf:
Error:\tApache has not been designed to serve pages while\n\trunning as root. There are known race conditions that\n\twill allow any local user to read any file on the system.\n\tIf you still desire to serve pages as root then\n\tadd -DBIG_SECURITY_HOLE to the CFLAGS env variable\n\tand then rebuild the server.\n\tIt is strongly suggested that you instead modify the User\n\tdirective in your httpd.conf file to list a non-root\n\tuser.\n
Action '-k start' failed.
ls -lart /var/lock/apache2
total 0
drwxr-xr-x 2 root root 40 Aug 18 07:26 .
drwxrwxrwt 3 root root 60 Aug 18 07:26 ..
useradd -m www //它将创建用户的主目录即使不存在,不创建用户主目录
vi /etc/apache2/envvars
export APACHE_RUN_USER=www
export APACHE_RUN_GROUP=www
成功了:
root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
root@raspberrypi:/var/lock# ls -lart
drwxr-xr-x 2 www root 40 Aug 18 07:33 apache2
阅读全文
apache2: bad user name ${APACHE_RUN_USER} 解决
开工后,发现有个虚拟机的apache没起来,调用apache2 -k start 后,提示如下内容:
apache2: bad user name ${APACHE_RUN_USER}
apache 启动时,是由读取 /etc/apache2/apache2.conf 读取了运行 User
而运行的user环境变量定义在/etc/apache2/envvars
而不是使用默认的登录账户启动,因此apache提供了
apache2ctl 工具来使用,调用
apache2ctl -k start
即可
______________________________________________________________________________________
pkill -9 apache
/usr/sbin/apache2 -k start
apache2: bad user name ${APACHE_RUN_USER}
/usr/sbin/apachectl -k start
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
启动成功!
vi +178 /etc/apache2/apache2.conf
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start
Syntax error on line 178 of /etc/apache2/apache2.conf:
Error:\tApache has not been designed to serve pages while\n\trunning as root. There are known race conditions that\n\twill allow any local user to read any file on the system.\n\tIf you still desire to serve pages as root then\n\tadd -DBIG_SECURITY_HOLE to the CFLAGS env variable\n\tand then rebuild the server.\n\tIt is strongly suggested that you instead modify the User\n\tdirective in your httpd.conf file to list a non-root\n\tuser.\n
Action '-k start' failed.
ls -lart /var/lock/apache2
total 0
drwxr-xr-x 2 root root 40 Aug 18 07:26 .
drwxrwxrwt 3 root root 60 Aug 18 07:26 ..
useradd -m www //它将创建用户的主目录即使不存在,不创建用户主目录
vi /etc/apache2/envvars
export APACHE_RUN_USER=www
export APACHE_RUN_GROUP=www
成功了:
root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
root@raspberrypi:/var/lock# ls -lart
drwxr-xr-x 2 www root 40 Aug 18 07:33 apache2
阅读全文
Git分支模型及版本控制
Unix/LinuxC技术 jackxiang 2015-5-12 17:31
Git分支模型及版本控制:
https://github.com/wmzhai/advanced-git-topic/blob/master/branching-model.md
https://github.com/wmzhai/advanced-git-topic/blob/master/branching-model.md
Firebug 的日志已达上限。 176 条未显示。
Unix/LinuxC技术 jackxiang 2015-5-12 14:34
extensions.firebug.console.logLimit 配置的。
Firebug's log limit has been reached. %S entries not shown. Firebug 的日志已达上限。 %S 条目没有显示。 建议: Firebug 的日志已达上限。
Firebug's log limit has been reached. %S entries not shown. Firebug 的日志已达上限。 %S 条目没有显示。 建议: Firebug 的日志已达上限。
Js、Jquery字符串数字比较大小!
Php/Js/Shell/Go jackxiang 2015-5-12 13:22
背景:如果用前端的js去做比较两个小数点1位的温度谁高谁低,那么直接用大于符号小于符号会有点问题,这篇文章就是讲解这一块的事情。
var定义的变量应该是字符串,有时没有经过类型转换而进行比较的话,小于十的话还可以,如果大于十就会出错。
js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。
例:
var hour_select_begin=$('#hour_select_begin option:selected').text();
var hour_select_end=$('#hour_select_end option:selected').text();
if(hour_select_begin>hour_select_end){
alert("开始时间不能大于结束时间");
return false;
}
这时如果 hour_select_begin>=10 则判断会有问题;
修正方法1:
if(eval_r(hour_select_begin)>eval_r(hour_select_end)){
alert("开始时间不能大于结束时间");
return false;
}
修正方法2:
将String转为number类型: hour_select_begin=hour_select_begin-0;
hour_select_begin=hour_select_end -0;
补充:
js 字符串转换数字
方法主要有三种
转换函数、强制类型转换、利用js变量弱类型转换。
1. 转换函数:
js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。
一些示例如下:
parseInt("1234blue"); //returns 1234
parseInt("0xA"); //returns 10
parseInt("22.5"); //returns 22
parseInt("blue"); //returns NaN
parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由parseInt()方法的第二个参数指定的,示例如下:
parseInt("AF", 16); //returns 175
parseInt("10", 2); //returns 2
parseInt("10", 8); //returns 8
parseInt("10", 10); //returns 10
如果十进制数包含前导0,那么最好采用基数10,这样才不会意外地得到八进制的值。例如:
parseInt("010"); //returns 8
parseInt("010", 8); //returns 8
parseInt("010", 10); //returns 10
parseFloat()方法与parseInt()方法的处理方式相似。
使用parseFloat()方法的另一不同之处在于,字符串必须以十进制形式表示浮点数,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. 强制类型转换
还可使用强制类型转换(type casting)处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。
ECMAScript中可用的3种强制类型转换如下:
Boolean(value)——把给定的值转换成Boolean型;
Number(value)——把给定的值转换成数字(可以是整数或浮点数);
String(value)——把给定的值转换成字符串。
用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。
当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。
可以用下面的代码段测试Boolean型的强制类型转换。
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()方法的处理方式相似,只是它转换的是整个值,而不是部分值。示例如下:
用 法 结 果
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
最后一种强制类型转换方法String()是最简单的,示例如下:
var s1 = String(null); //"null"
var oNull = null;
var s2 = oNull.toString(); //won’t work, causes an error
3. 利用js变量弱类型转换
举个小例子,一看,就会明白了。
<script>
var str= '012.345 ';
var x = str-0;
x = x*1;
</script>
上例利用了js的弱类型的特点,只进行了算术运算,实现了字符串到数字的类型转换,不过这个方法还是不推荐的
转换成数字
ECMAScript提供了两种把非数字的原始值转换成数字的方法,即parseInt()和parseFloat()。
注意:只有对String类型(Number除外)调用这些方法,才能正确运行对其他类型返回的都是NaN。
例如:
Js代码
var iNum1 = parseInt(“1234blue”);//returns 1234 var iNum2 = parseInt(“oxA”); //returns 10 var iNum3 = parseInt(“22.5″); //returns 22 var iNum4 = parseInt(“blue”); //returns NaN
以下其他类型转换
一、类型转换
1.转换成字串
ECMAScript的Boolean值、数字和字串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。
如:
Js代码
var sColor = “blue”;
alert(sColor.length);//outputs “4″
总而言之,3种主要的原始值Boolean值、数字和字串都有toString()方法。ECMAScript定义的所有对象都有toString()方法,无论它是伪对象,还是真的对象。
Boolean型的toString()方法只是输出”true”或”false”,结果由变量的值决定:
Js代码
var bFound = false;
alert(bFound.toString());//outputs “false”
Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式,采用默认模式,toString()方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学记数法)。
Js代码
var iNum1 = 10; var fNum2 = 10.0; alert(iNum1.toString()); //outputs “10″ alert(fNum2.toString()); //outputs “10″
采用Number类型的toString()方法的基模式,可以用不同的基(进制基数)输出数字。
Js代码
var iNum = 10; alert(iNum.toString(2)); //outputs “1010″ alert(iNum.toString(8)); //outputs “12″ alert(iNum.toString(16)); //outputs “A”
2.转换成数字
ECMAScript提供了两种把非数字的原始值转换成数字的方法,即parseInt()和parseFloat()。
注意:只有对String类型(Number除外)调用这些方法,才能正确运行对其他类型返回的都是NaN。
例如:
Js代码
var iNum1 = parseInt(“1234blue”);//returns 1234 var iNum2 = parseInt(“oxA”); //returns 10 var iNum3 = parseInt(“22.5″); //returns 22 var iNum4 = parseInt(“blue”); //returns NaN
parseInt()方法还有基模式,可以把二进制、八进制、十六进制或者其他任何进制的字符串转换成十进制整数。第二个参数指定按哪一种进制来解析。
Js代码
var iNum1 = parseInt(“AF”,16);// returns 175 var iNum2 = parseInt(“10″,2); // returns 2 var iNum3 = parseInt(“10″,8); //returns 8 var iNum4 = parseInt(“10″,10); //returns 10
说明:如果十进制数包含前导0,那么最好采用基数10,否则得到的是八进制的值。
Js代码
var iNum1 = parseInt(“010″); // returns 8 var iNum2 = parseInt(“010″,8); //returns 8 var iNum3 = parseInt(“010″,10);//returns 10
parseFloat()方法与parseInt()方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符之前的字串转换成数字。对于这个方法来说,第一个出现的小数点是有效字符。如果用两个小数点,第二个小数点将被看作无效的。使用该方法的另一个不同之处在于,字串必须以十进制形式表示浮点数。
Js代码
var fNum1 = parseFloat(“1234blue”); //returns 1234.0 var fNum2 = parseFloat(“0xA”); //returns NaN var fNum3 = parseFloat(“22.5″); //returns 22.5 var fNum4 = parseFloat(“22.34.5″);//returns 22.34 var fNum5 = parseFloat(“0908″);//returns NaN var fNum6 = parseFloat(“blue”);//returns NaN
3.强制类型转换
ECMAScript中可用的3种强制类型转换如下:
(1).Boolean(value)
把给定的值转换成Boolean型。
当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。
如:
Js代码
var b1 = Boolean(“”); // false; var b2 = Boolean(“hi”);//true var b3 = Boolean(100);//true var b4 = Boolean(null);//false var b5 = Boolean(0);//false var b6 = Boolean(new Object());//true
(2).Number(value)
把给定的值转换成数字(可以是整数或浮点数)。
还记得parseInt()和parseFloat()方法只转换第一个无效字符之前的字符串,因此”4.5.6″将被转换为”4.5″。用Number()进行强制类型转换,”4.5.6″将返回NaN,因为整个字符串值不能转换成数字。如果字符串能被完整地转换,Number()将判断是调用parseInt()方法还是调用parseFloat()方法。
如:
Js代码
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
(3).String(value)
把给定的值转换成字串。
与调用toString()方法的唯一不同之处在于,对null或undefined值强制类型转换可以生成字符串而不引发错误:
Js代码
var s1 = String(null);//”null” var oNull = null; var s2 = oNull.toString();//causes an error
二、引用类型
引用类型通常叫作类(class),也就是说,遇到引用值时,所处理的就是对象。ECMAScript定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。
1.Object类
ECMAScript中的所有类都由这个类继承而来,Object类中的所有属性和方法都会出现在其他类中(被覆盖)。
Object类的属性:
(1).Constructor—-对创建对象的函数的引用(指针)。对于Object类,该指针指向原始的object()函数。
(2).Prototype—-对该对象的对象原型的引用。对于所有的类,它默认返回Object对象的一个实例。 一、类型转换
1.转换成字串
ECMAScript的Boolean值、数字和字串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。
如:
Js代码
var sColor = “blue”; alert(sColor.length);//outputs “4″
总而言之,3种主要的原始值Boolean值、数字和字串都有toString()方法。ECMAScript定义的所有对象都有toString()方法,无论它是伪对象,还是真的对象。
Boolean型的toString()方法只是输出”true”或”false”,结果由变量的值决定:
Js代码
var bFound = false; alert(bFound.toString());//outputs “false”
Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式,采用默认模式,toString()方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学记数法)。
Js代码var iNum1 = 10; var fNum2 = 10.0; alert(iNum1.toString()); //outputs “10″ alert(fNum2.toString()); //outputs “10″
采用Number类型的toString()方法的基模式,可以用不同的基(进制基数)输出数字。
Js代码var iNum = 10; alert(iNum.toString(2)); //outputs “1010″ alert(iNum.toString(8)); //outputs “12″ alert(iNum.toString(16)); //outputs “A”
parseInt()方法还有基模式,可以把二进制、八进制、十六进制或者其他任何进制的字符串转换成十进制整数。第二个参数指定按哪一种进制来解析。
Js代码var iNum1 = parseInt(“AF”,16);// returns 175 var iNum2 = parseInt(“10″,2); // returns 2 var iNum3 = parseInt(“10″,8); //returns 8 var iNum4 = parseInt(“10″,10); //returns 10
说明:如果十进制数包含前导0,那么最好采用基数10,否则得到的是八进制的值。
Js代码var iNum1 = parseInt(“010″); // returns 8 var iNum2 = parseInt(“010″,8); //returns 8 var iNum3 = parseInt(“010″,10);//returns 10
parseFloat()方法与parseInt()方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符之前的字串转换成数字。对于这个方法来说,第一个出现的小数点是有效字符。如果用两个小数点,第二个小数点将被看作无效的。使用该方法的另一个不同之处在于,字串必须以十进制形式表示浮点数。
Js代码var fNum1 = parseFloat(“1234blue”); //returns 1234.0 var fNum2 = parseFloat(“0xA”); //returns NaN var fNum3 = parseFloat(“22.5″); //returns 22.5 var fNum4 = parseFloat(“22.34.5″);//returns 22.34 var fNum5 = parseFloat(“0908″);//returns NaN var fNum6 = parseFloat(“blue”);//returns NaN
3.强制类型转换
ECMAScript中可用的3种强制类型转换如下:
(1).Boolean(value)
把给定的值转换成Boolean型。
当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。
如:
Js代码var b1 = Boolean(“”); // false; var b2 = Boolean(“hi”);//true var b3 = Boolean(100);//true var b4 = Boolean(null);//false var b5 = Boolean(0);//false var b6 = Boolean(new Object());//true
(2).Number(value)
把给定的值转换成数字(可以是整数或浮点数)。
还记得parseInt()和parseFloat()方法只转换第一个无效字符之前的字符串,因此”4.5.6″将被转换为”4.5″。用Number()进行强制类型转换,”4.5.6″将返回NaN,因为整个字符串值不能转换成数字。如果字符串能被完整地转换,Number()将判断是调用parseInt()方法还是调用parseFloat()方法。
如:
Js代码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
(3).String(value)
把给定的值转换成字串。
与调用toString()方法的唯一不同之处在于,对null或undefined值强制类型转换可以生成字符串而不引发错误:
Js代码
var s1 = String(null);//”null” var oNull = null; var s2 = oNull.toString();//causes an error
二、引用类型
引用类型通常叫作类(class),也就是说,遇到引用值时,所处理的就是对象。ECMAScript定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。
1.Object类
ECMAScript中的所有类都由这个类继承而来,Object类中的所有属性和方法都会出现在其他类中(被覆盖)。
Object类的属性:
(1).Constructor—-对创建对象的函数的引用(指针)。对于Object类,该指针指向原始的object()函数。
(2).Prototype—-对该对象的对象原型的引用。对于所有的类,它默认返回Object对象的一个实例。
转自:http://blog.sina.com.cn/s/blog_4b7b2fc501010xar.html
var定义的变量应该是字符串,有时没有经过类型转换而进行比较的话,小于十的话还可以,如果大于十就会出错。
js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。
例:
var hour_select_begin=$('#hour_select_begin option:selected').text();
var hour_select_end=$('#hour_select_end option:selected').text();
if(hour_select_begin>hour_select_end){
alert("开始时间不能大于结束时间");
return false;
}
这时如果 hour_select_begin>=10 则判断会有问题;
修正方法1:
if(eval_r(hour_select_begin)>eval_r(hour_select_end)){
alert("开始时间不能大于结束时间");
return false;
}
修正方法2:
将String转为number类型: hour_select_begin=hour_select_begin-0;
hour_select_begin=hour_select_end -0;
补充:
js 字符串转换数字
方法主要有三种
转换函数、强制类型转换、利用js变量弱类型转换。
1. 转换函数:
js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。
一些示例如下:
parseInt("1234blue"); //returns 1234
parseInt("0xA"); //returns 10
parseInt("22.5"); //returns 22
parseInt("blue"); //returns NaN
parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由parseInt()方法的第二个参数指定的,示例如下:
parseInt("AF", 16); //returns 175
parseInt("10", 2); //returns 2
parseInt("10", 8); //returns 8
parseInt("10", 10); //returns 10
如果十进制数包含前导0,那么最好采用基数10,这样才不会意外地得到八进制的值。例如:
parseInt("010"); //returns 8
parseInt("010", 8); //returns 8
parseInt("010", 10); //returns 10
parseFloat()方法与parseInt()方法的处理方式相似。
使用parseFloat()方法的另一不同之处在于,字符串必须以十进制形式表示浮点数,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. 强制类型转换
还可使用强制类型转换(type casting)处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。
ECMAScript中可用的3种强制类型转换如下:
Boolean(value)——把给定的值转换成Boolean型;
Number(value)——把给定的值转换成数字(可以是整数或浮点数);
String(value)——把给定的值转换成字符串。
用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。
当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。
可以用下面的代码段测试Boolean型的强制类型转换。
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()方法的处理方式相似,只是它转换的是整个值,而不是部分值。示例如下:
用 法 结 果
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
最后一种强制类型转换方法String()是最简单的,示例如下:
var s1 = String(null); //"null"
var oNull = null;
var s2 = oNull.toString(); //won’t work, causes an error
3. 利用js变量弱类型转换
举个小例子,一看,就会明白了。
<script>
var str= '012.345 ';
var x = str-0;
x = x*1;
</script>
上例利用了js的弱类型的特点,只进行了算术运算,实现了字符串到数字的类型转换,不过这个方法还是不推荐的
转换成数字
ECMAScript提供了两种把非数字的原始值转换成数字的方法,即parseInt()和parseFloat()。
注意:只有对String类型(Number除外)调用这些方法,才能正确运行对其他类型返回的都是NaN。
例如:
Js代码
var iNum1 = parseInt(“1234blue”);//returns 1234 var iNum2 = parseInt(“oxA”); //returns 10 var iNum3 = parseInt(“22.5″); //returns 22 var iNum4 = parseInt(“blue”); //returns NaN
以下其他类型转换
一、类型转换
1.转换成字串
ECMAScript的Boolean值、数字和字串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。
如:
Js代码
var sColor = “blue”;
alert(sColor.length);//outputs “4″
总而言之,3种主要的原始值Boolean值、数字和字串都有toString()方法。ECMAScript定义的所有对象都有toString()方法,无论它是伪对象,还是真的对象。
Boolean型的toString()方法只是输出”true”或”false”,结果由变量的值决定:
Js代码
var bFound = false;
alert(bFound.toString());//outputs “false”
Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式,采用默认模式,toString()方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学记数法)。
Js代码
var iNum1 = 10; var fNum2 = 10.0; alert(iNum1.toString()); //outputs “10″ alert(fNum2.toString()); //outputs “10″
采用Number类型的toString()方法的基模式,可以用不同的基(进制基数)输出数字。
Js代码
var iNum = 10; alert(iNum.toString(2)); //outputs “1010″ alert(iNum.toString(8)); //outputs “12″ alert(iNum.toString(16)); //outputs “A”
2.转换成数字
ECMAScript提供了两种把非数字的原始值转换成数字的方法,即parseInt()和parseFloat()。
注意:只有对String类型(Number除外)调用这些方法,才能正确运行对其他类型返回的都是NaN。
例如:
Js代码
var iNum1 = parseInt(“1234blue”);//returns 1234 var iNum2 = parseInt(“oxA”); //returns 10 var iNum3 = parseInt(“22.5″); //returns 22 var iNum4 = parseInt(“blue”); //returns NaN
parseInt()方法还有基模式,可以把二进制、八进制、十六进制或者其他任何进制的字符串转换成十进制整数。第二个参数指定按哪一种进制来解析。
Js代码
var iNum1 = parseInt(“AF”,16);// returns 175 var iNum2 = parseInt(“10″,2); // returns 2 var iNum3 = parseInt(“10″,8); //returns 8 var iNum4 = parseInt(“10″,10); //returns 10
说明:如果十进制数包含前导0,那么最好采用基数10,否则得到的是八进制的值。
Js代码
var iNum1 = parseInt(“010″); // returns 8 var iNum2 = parseInt(“010″,8); //returns 8 var iNum3 = parseInt(“010″,10);//returns 10
parseFloat()方法与parseInt()方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符之前的字串转换成数字。对于这个方法来说,第一个出现的小数点是有效字符。如果用两个小数点,第二个小数点将被看作无效的。使用该方法的另一个不同之处在于,字串必须以十进制形式表示浮点数。
Js代码
var fNum1 = parseFloat(“1234blue”); //returns 1234.0 var fNum2 = parseFloat(“0xA”); //returns NaN var fNum3 = parseFloat(“22.5″); //returns 22.5 var fNum4 = parseFloat(“22.34.5″);//returns 22.34 var fNum5 = parseFloat(“0908″);//returns NaN var fNum6 = parseFloat(“blue”);//returns NaN
3.强制类型转换
ECMAScript中可用的3种强制类型转换如下:
(1).Boolean(value)
把给定的值转换成Boolean型。
当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。
如:
Js代码
var b1 = Boolean(“”); // false; var b2 = Boolean(“hi”);//true var b3 = Boolean(100);//true var b4 = Boolean(null);//false var b5 = Boolean(0);//false var b6 = Boolean(new Object());//true
(2).Number(value)
把给定的值转换成数字(可以是整数或浮点数)。
还记得parseInt()和parseFloat()方法只转换第一个无效字符之前的字符串,因此”4.5.6″将被转换为”4.5″。用Number()进行强制类型转换,”4.5.6″将返回NaN,因为整个字符串值不能转换成数字。如果字符串能被完整地转换,Number()将判断是调用parseInt()方法还是调用parseFloat()方法。
如:
Js代码
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
(3).String(value)
把给定的值转换成字串。
与调用toString()方法的唯一不同之处在于,对null或undefined值强制类型转换可以生成字符串而不引发错误:
Js代码
var s1 = String(null);//”null” var oNull = null; var s2 = oNull.toString();//causes an error
二、引用类型
引用类型通常叫作类(class),也就是说,遇到引用值时,所处理的就是对象。ECMAScript定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。
1.Object类
ECMAScript中的所有类都由这个类继承而来,Object类中的所有属性和方法都会出现在其他类中(被覆盖)。
Object类的属性:
(1).Constructor—-对创建对象的函数的引用(指针)。对于Object类,该指针指向原始的object()函数。
(2).Prototype—-对该对象的对象原型的引用。对于所有的类,它默认返回Object对象的一个实例。 一、类型转换
1.转换成字串
ECMAScript的Boolean值、数字和字串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。
如:
Js代码
var sColor = “blue”; alert(sColor.length);//outputs “4″
总而言之,3种主要的原始值Boolean值、数字和字串都有toString()方法。ECMAScript定义的所有对象都有toString()方法,无论它是伪对象,还是真的对象。
Boolean型的toString()方法只是输出”true”或”false”,结果由变量的值决定:
Js代码
var bFound = false; alert(bFound.toString());//outputs “false”
Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式,采用默认模式,toString()方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学记数法)。
Js代码var iNum1 = 10; var fNum2 = 10.0; alert(iNum1.toString()); //outputs “10″ alert(fNum2.toString()); //outputs “10″
采用Number类型的toString()方法的基模式,可以用不同的基(进制基数)输出数字。
Js代码var iNum = 10; alert(iNum.toString(2)); //outputs “1010″ alert(iNum.toString(8)); //outputs “12″ alert(iNum.toString(16)); //outputs “A”
parseInt()方法还有基模式,可以把二进制、八进制、十六进制或者其他任何进制的字符串转换成十进制整数。第二个参数指定按哪一种进制来解析。
Js代码var iNum1 = parseInt(“AF”,16);// returns 175 var iNum2 = parseInt(“10″,2); // returns 2 var iNum3 = parseInt(“10″,8); //returns 8 var iNum4 = parseInt(“10″,10); //returns 10
说明:如果十进制数包含前导0,那么最好采用基数10,否则得到的是八进制的值。
Js代码var iNum1 = parseInt(“010″); // returns 8 var iNum2 = parseInt(“010″,8); //returns 8 var iNum3 = parseInt(“010″,10);//returns 10
parseFloat()方法与parseInt()方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符之前的字串转换成数字。对于这个方法来说,第一个出现的小数点是有效字符。如果用两个小数点,第二个小数点将被看作无效的。使用该方法的另一个不同之处在于,字串必须以十进制形式表示浮点数。
Js代码var fNum1 = parseFloat(“1234blue”); //returns 1234.0 var fNum2 = parseFloat(“0xA”); //returns NaN var fNum3 = parseFloat(“22.5″); //returns 22.5 var fNum4 = parseFloat(“22.34.5″);//returns 22.34 var fNum5 = parseFloat(“0908″);//returns NaN var fNum6 = parseFloat(“blue”);//returns NaN
3.强制类型转换
ECMAScript中可用的3种强制类型转换如下:
(1).Boolean(value)
把给定的值转换成Boolean型。
当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。
如:
Js代码var b1 = Boolean(“”); // false; var b2 = Boolean(“hi”);//true var b3 = Boolean(100);//true var b4 = Boolean(null);//false var b5 = Boolean(0);//false var b6 = Boolean(new Object());//true
(2).Number(value)
把给定的值转换成数字(可以是整数或浮点数)。
还记得parseInt()和parseFloat()方法只转换第一个无效字符之前的字符串,因此”4.5.6″将被转换为”4.5″。用Number()进行强制类型转换,”4.5.6″将返回NaN,因为整个字符串值不能转换成数字。如果字符串能被完整地转换,Number()将判断是调用parseInt()方法还是调用parseFloat()方法。
如:
Js代码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
(3).String(value)
把给定的值转换成字串。
与调用toString()方法的唯一不同之处在于,对null或undefined值强制类型转换可以生成字符串而不引发错误:
Js代码
var s1 = String(null);//”null” var oNull = null; var s2 = oNull.toString();//causes an error
二、引用类型
引用类型通常叫作类(class),也就是说,遇到引用值时,所处理的就是对象。ECMAScript定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。
1.Object类
ECMAScript中的所有类都由这个类继承而来,Object类中的所有属性和方法都会出现在其他类中(被覆盖)。
Object类的属性:
(1).Constructor—-对创建对象的函数的引用(指针)。对于Object类,该指针指向原始的object()函数。
(2).Prototype—-对该对象的对象原型的引用。对于所有的类,它默认返回Object对象的一个实例。
转自:http://blog.sina.com.cn/s/blog_4b7b2fc501010xar.html
背景:做温控,存在小数位数设置到整数时,没有小数后一位,需要补齐,于是格式化势在必行,像c有sprintf,javascript还不清楚,于是查了下,也有类似的函数来实现这样的功能:i1.toFixed(1),也就是:$("#controlTempValue").html(toFixed(setTempRature,1));。
——————————————————————————————————————————————————————————
如果出现:ToFixed() Is Not A Function?
TypeError: setTempRature.toFixed is not a function
var setTempRatureDisplay = setTempRature.toFixed(1);
使用toFixed对小数四舍五入的时候,弹出以下错误提示:
toFixed() is not a function
后来还是在stackoverflow上找到了答案
toFixed isn’t a property of non-numeric variable types. In other words, Low and High can’t be fixed because when you get the value of something in Javascript, it automatically is set to a string type. Using parseFloat() (or parseInt() with a radix, if it’s an integer) will allow you to convert different variable types to numbers which will enable the toFixed() function to work.
var Low = parseFloat($SliderValFrom.val()),
var High = parseFloat($SliderValTo.val());
原来toFixed只能针对数字类型才能使用,所以对于字符类型的要用parseFloat或者parseInt函数先转一下再调用
摘自:http://www.jason-z.com/tofixed-is-not-a-function/
——————————————————————————————————————————————————————————
在客户js中,我们时常会碰到处理这样的小数类型(转换为字符串):
var i = 1234.8700
document.write("i") //结果:1234.87 我们想要的结果是1234.8700
也就是小数的有效位数为4位.js中有一个处理这种情况的函数,toFixed(小数有效位数).
如:
var i1 = 3456.244280;
alert(i1.toFixed(2)); // 输出 1024.24
var i2 = 3456.24558;
alert(i2.toFixed(2)); // 输出 1024.25
var i3 = 3456.2;
alert(i3.toFixed(2)); // 输出 1024.20
摘自:http://www.cnblogs.com/rainnight/archive/2009/02/10/1387483.html
——————————————————————————————————————————————————————————
如果出现:ToFixed() Is Not A Function?
TypeError: setTempRature.toFixed is not a function
var setTempRatureDisplay = setTempRature.toFixed(1);
使用toFixed对小数四舍五入的时候,弹出以下错误提示:
toFixed() is not a function
后来还是在stackoverflow上找到了答案
toFixed isn’t a property of non-numeric variable types. In other words, Low and High can’t be fixed because when you get the value of something in Javascript, it automatically is set to a string type. Using parseFloat() (or parseInt() with a radix, if it’s an integer) will allow you to convert different variable types to numbers which will enable the toFixed() function to work.
var Low = parseFloat($SliderValFrom.val()),
var High = parseFloat($SliderValTo.val());
原来toFixed只能针对数字类型才能使用,所以对于字符类型的要用parseFloat或者parseInt函数先转一下再调用
摘自:http://www.jason-z.com/tofixed-is-not-a-function/
——————————————————————————————————————————————————————————
在客户js中,我们时常会碰到处理这样的小数类型(转换为字符串):
var i = 1234.8700
document.write("i") //结果:1234.87 我们想要的结果是1234.8700
也就是小数的有效位数为4位.js中有一个处理这种情况的函数,toFixed(小数有效位数).
如:
var i1 = 3456.244280;
alert(i1.toFixed(2)); // 输出 1024.24
var i2 = 3456.24558;
alert(i2.toFixed(2)); // 输出 1024.25
var i3 = 3456.2;
alert(i3.toFixed(2)); // 输出 1024.20
摘自:http://www.cnblogs.com/rainnight/archive/2009/02/10/1387483.html
来自:https://www.cnblogs.com/Eivll0m/p/4921829.html
一)他怎么知道缓存在那个目录呢?
You can add a line in wp-config.php like below:
define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache');
root@101.200.228.135:/data/htdocs/jackxiang.com# grep -r "RT_WP_NGINX_HELPER_CACHE_PATH" ./
./wp-content/plugins/nginx-helper/nginx-helper.php: define('RT_WP_NGINX_HELPER_CACHE_PATH', '/var/run/nginx-cache');
./wp-content/plugins/nginx-helper/purger.php: if (!defined('RT_WP_NGINX_HELPER_CACHE_PATH')) {
./wp-content/plugins/nginx-helper/readme.txt:`define('RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache/');`
vim打开上面文件替换:
%s/\/var\/run\/nginx-cache/\/data\/cache\/ngx_fcgi_cache2/g
二)总配置:/conf/nginx.conf
三)分配置:/conf/vhost/jackxiang.conf 阅读全文
一)他怎么知道缓存在那个目录呢?
You can add a line in wp-config.php like below:
define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache');
root@101.200.228.135:/data/htdocs/jackxiang.com# grep -r "RT_WP_NGINX_HELPER_CACHE_PATH" ./
./wp-content/plugins/nginx-helper/nginx-helper.php: define('RT_WP_NGINX_HELPER_CACHE_PATH', '/var/run/nginx-cache');
./wp-content/plugins/nginx-helper/purger.php: if (!defined('RT_WP_NGINX_HELPER_CACHE_PATH')) {
./wp-content/plugins/nginx-helper/readme.txt:`define('RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache/');`
vim打开上面文件替换:
%s/\/var\/run\/nginx-cache/\/data\/cache\/ngx_fcgi_cache2/g
二)总配置:/conf/nginx.conf
三)分配置:/conf/vhost/jackxiang.conf 阅读全文
PHP Deprecated: Comments starting with '#' are deprecated in *.ini 警告解决办法
Php/Js/Shell/Go jackxiang 2015-5-7 17:20
背景:Newest 'owncloud' Questions - Stack Overflow Track down PHP error “Comments starting with '#' are deprecated in Unknown on line 1 at Unknown#0” I've just set up a RPi 2 with the latest ...
PHP Deprecated: Comments starting with '#' are deprecated in *.ini 警告解决办法
新装的CentOS7 64系统,使用新立得装的PHP 版本,但是每次我在命令行下执行php脚本时都会出如下的警告信息:
PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/mcrypt.ini on line 1 in Unknown on line 0
上网查了一下,原来是新版本的PHP不赞成用'#'号作为注释符号,需要用分号';'。打开这个文件,把里面的#替换成;号,问题解决!
摘自:http://blog.csdn.net/rainday0310/article/details/6330115
Shell脚本风格的单行注释
这种注释方式使用"#"的形式实现,它的用法与C++语言风格注释方式相似。使用Shell脚本风格进行单行注释的PHP示例代码如下:
参考:http://jackxiang.com/post/6532/
PHP Deprecated: Comments starting with '#' are deprecated in *.ini 警告解决办法
新装的CentOS7 64系统,使用新立得装的PHP 版本,但是每次我在命令行下执行php脚本时都会出如下的警告信息:
PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/mcrypt.ini on line 1 in Unknown on line 0
上网查了一下,原来是新版本的PHP不赞成用'#'号作为注释符号,需要用分号';'。打开这个文件,把里面的#替换成;号,问题解决!
摘自:http://blog.csdn.net/rainday0310/article/details/6330115
Shell脚本风格的单行注释
这种注释方式使用"#"的形式实现,它的用法与C++语言风格注释方式相似。使用Shell脚本风格进行单行注释的PHP示例代码如下:
参考:http://jackxiang.com/post/6532/
[实践OK]CentOS7下编译apache的依赖链接库时解决编译libiconv时的'gets' undeclared here错误
Unix/LinuxC技术 jackxiang 2015-5-7 16:56
wget -c http://www.itkb.ro/userfiles/file/libiconv-glibc-2.16.patch.gz
cd libiconv-1.14/srclib
patch -p1 stdio.in.h
俺运行patch后好久都没有反应 :( 最后人肉修改
这个补丁的内容如上,用unzip包解压后rz上CentOS7上去,修改成下面这样:
/data/software/libiconv-1.14/srclib/stdio.in.h
参考来自:http://forum.z27315.com/topic/15662-%E8%A7%A3%E5%86%B3%E7%BC%96%E8%AF%91libiconv%E6%97%B6%E7%9A%84gets-undeclared-here%E9%94%99%E8%AF%AF/
cd libiconv-1.14/srclib
patch -p1 stdio.in.h
俺运行patch后好久都没有反应 :( 最后人肉修改
这个补丁的内容如上,用unzip包解压后rz上CentOS7上去,修改成下面这样:
/data/software/libiconv-1.14/srclib/stdio.in.h
参考来自:http://forum.z27315.com/topic/15662-%E8%A7%A3%E5%86%B3%E7%BC%96%E8%AF%91libiconv%E6%97%B6%E7%9A%84gets-undeclared-here%E9%94%99%E8%AF%AF/
背景:整了一把hhvm,发现其对wordpress支持还不错,对bo-blog也还成,但是bo-blog里的验证码好像就不行了,对owncloud直接就歇菜了出现内部服务器错误。那就还回常规的php吧,出现:
[root@jackxiang vhost]# service nginx start
Starting nginx... Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 134217728) failed (12: Cannot allocate memory)
——————————————————————————————————————————————————
按照以往的设置,直接设定fastcgi_cache:
fastcgi_cache_path /data/nginx/fastcgi_cache levels=1:2 keys_zone=ngx_fcgi_cache:150m inactive=1d max_size=40g;
但是,出现错误:
nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 536870912) failed (12: Cannot allocate memory)
原因是共享内存空间设置过大,系统已没有足够的内存分配,导致无法启动nginx,可以将上面的keys_zone=ngx_fcgi_cache:150m,设置小一些,例如keys_zone=ngx_fcgi_cache:50m,即可。
最后,
为何没有足够的内存分配?是因为我在虚拟机里面又装了一个virtual box,里面装了一个windows 2003,它里面装了一个Rtx Server,于是没啥内存了。
后记,
有兄弟建议:HHVM对GD支持OK么,现在研究hhvm。。不如耐心等10月phpng。
我的回复是:不清楚呢,我也是昨天才安成功了hhvm,用的群里兄弟贴的链接地址。
提前体验一下,这块我觉得这块是智能化还是傻瓜化:
我发现这个hhvm某个链接访问后,一段时间再访问好像又重新编译了。
但如果访问频率很快呢,就会发现性能的确还不错...这块新版PHP得规避。
[root@jackxiang vhost]# service nginx start
Starting nginx... Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 134217728) failed (12: Cannot allocate memory)
——————————————————————————————————————————————————
按照以往的设置,直接设定fastcgi_cache:
fastcgi_cache_path /data/nginx/fastcgi_cache levels=1:2 keys_zone=ngx_fcgi_cache:150m inactive=1d max_size=40g;
但是,出现错误:
nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 536870912) failed (12: Cannot allocate memory)
原因是共享内存空间设置过大,系统已没有足够的内存分配,导致无法启动nginx,可以将上面的keys_zone=ngx_fcgi_cache:150m,设置小一些,例如keys_zone=ngx_fcgi_cache:50m,即可。
最后,
为何没有足够的内存分配?是因为我在虚拟机里面又装了一个virtual box,里面装了一个windows 2003,它里面装了一个Rtx Server,于是没啥内存了。
后记,
有兄弟建议:HHVM对GD支持OK么,现在研究hhvm。。不如耐心等10月phpng。
我的回复是:不清楚呢,我也是昨天才安成功了hhvm,用的群里兄弟贴的链接地址。
提前体验一下,这块我觉得这块是智能化还是傻瓜化:
我发现这个hhvm某个链接访问后,一段时间再访问好像又重新编译了。
但如果访问频率很快呢,就会发现性能的确还不错...这块新版PHP得规避。
http://jingyan.baidu.com/article/4b52d70250e7f5fc5d774b7d.html