所有由罗佳(博主)发布的文章

[javascript]toFixed保留小数位数

这是一个笔记,如果有什么建议或学习意见或错误可以留言提出来。
[爪机博]
[想直接看正文请往最底下看]

之前突发奇想要做个什么东西,需要截断小数点后指定位数的小数,当时还不知道有toFixed这个方法,于是乎我自己想了很多伤资源的方法,比如乘以10的几次方以后舍小数再除回去之类的。这是一段悲剧的思考过程,考虑了一堆事情,为了纪念浪费掉的这段时间[对我来说待在学校里比这还浪费时间],我决定特意为这个方法写一篇博文来mark一下。

似乎是正文:
toFixed是一个Number对象的方法,主要用来保留小数,然后它的用法是

var a=213.1234567898754;
a.toFixed(指定位数);

Ps:
小数最后一位采用四舍五入。
位数为0〜20的整数,参数错误会抛出异常。
如果参数大于le+21(这是啥?)的话,会返回指数形式的数[结果是string类型]。
如果小数本身位数不足指定位数,会用0补足。
默认参数是0,也就是不输入参数的话它的行为是保留整数。

正文似乎结束了。

server-sent 服务器主动发送事件

以前的HTML版本中,要获取实时数据,必须要不断向服务器发出请求来查询有没有新内容,这样不管从建立连接还是等待时间来说都是要多苦逼就有多苦逼啊(微观来说),[最近死在学校里实在没事做就去逛了逛w3,中文的w3school更新比英文版慢了不知多少啊]然后我发现了w3的html专版里多出了一个HTML5 服务器发送事件这东西。
看了一下他的介绍大概知道她是干什么用的了,简单地说就是用javascript建立一个长连接到一个网页脚本,然后脚本就可以按需向浏览器页面主动发送数据。

下面来解释一下工作方式

//这是我整合了w3里的示例代码,添加详细注释来助解
if (typeof(EventSource) !== "undefined") {//检查是否支持服务器推送
	var a = new EventSource("脚本.php");//建立和"脚本.php"的连接
	a.onmessage=function(event) {//接收到消息的事件
		/*这里的event.data存储了从服务器传回来的数据*/
        /*比如alert(event.data)来提示返回的数据*/
	};
    
    a.onopen=function(event){//打开连接时的事件
    /*用event.readyState可以获取此时的状态号*/
        /*建立好连接的时候干些什么*/
    };
    
    a.onerror=function(event){//发生错误时的事件
    /*用event.readyState可以获取此时的状态号*/
        /*发生错误的时候干些什么*/
    };
} else {//不支持推送的话
	alert("您老的浏览器不支持服务器推送");
    
    a.close();//用close()方法可以关闭连接
    a=null;//把a对象清空,让它的空间自动被回收
}

[javascript]设置函数默认参数

在javascript里是不可以用

function a(q=0){..}

这种方式定义参数的默认值的,但是默认值又是一个很有用的东东,它可以设置一些普遍使用的参数来减小使用时候的麻烦。
那么总会有办法解决这种奇葩的问题的。

接下来就是见证奇迹的时刻!

function a(b){
	var c=arguments[1]?arguments[1]:"c的默认值";
	alert(b);
	alert(c);
}

这个时候使用它

a(213,3);//先后跳出提示框:213和3
a(213);//先后跳出提示框:213和"c的默认值"

肿么会这样纸呢?细心的小朋友们应该可以发现这么一个[arguments[1]?arguments[1]:”c的默认值”],而且第一次调用a()的时候输入了两个参数。

原因就是:
首先,js不会因为输入的参数个数和定义时的个数不一样而报错
然后,函数中有一个叫做arguments的数组来保存输入函数的参数

这样就可以知道了,在arguments[1]?arguments[1]:”c的默认值”里,arguments[1]就是输入函数的第二个参数(数组的编号从0开始)(首先在这里假如你知道?:操作符的用法,不知道请先去百度回炉。。)

var c=          //c等于
arguments[1]?   //第二个参数存在吗?存在的话c等于第二个参数的值
arguments[1]:   //第二个参数不存在?
"c的默认值";     //不存在就设置为"c的默认值"

 

感谢@BlackGlory的提醒

function a(b){
b=b||"默认值";
}

 

这种方法更加简便

===========2021/11/27 更新============

现在的js已经可以用文章开头的方法定义默认参数了,只要调用函数时没有填该参数或者参数的值为undefined,都会使用定义的默认参数传入。

判断访问者是否是搜索引擎

有的时候我们需要针对搜索引擎抓取做一些特殊的回应、所以要用到判断是否为搜索引擎的方法,我在网上找了几种来做个笔记,就先不验证效果了。

第一种
来源:php判断是否搜索引擎 – php

function strexists($haystack, $needle) {
       return !(strpos($haystack, $needle) === FALSE);
} 
/*
*检验搜索
*/
function getrobot() {   
    if(!defined('IS_ROBOT')) {   
        $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';   
        $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';   
        if(!strexists($_SERVER['HTTP_USER_AGENT'], 'http://') && preg_match("/($kw_browsers)/i", $_SERVER['HTTP_USER_AGENT'])) {   
            define('IS_ROBOT', FALSE);   
        } elseif(preg_match("/($kw_spiders)/i", $_SERVER['HTTP_USER_AGENT'])) {   
            define('IS_ROBOT', TRUE);   
        } else {   
            define('IS_ROBOT', FALSE);   
        }   
    }   
    return IS_ROBOT;   
}

看代码这一种方法是判断来访者是不是某一种浏览器,如果是的话就判断为用户,不是的话就判断为蜘蛛。 继续阅读判断访问者是否是搜索引擎

主题更换记录:佳佳酱才是小黑呢【4】

又到了佳佳酱换主题的日子[其实只是突发奇想来换个主题。。]
本着每次换主题都要做个记录的精神,这次也来记录一下。

上一个主题:佳佳酱才是小黑呢【3】
本个主题:佳佳酱才是小黑呢【4】

旧主题view

新主题view

更新内容:
这次没做什么改进,只是换了个励志背景图,还合并了css里几个相同选择器的样式。

itisso.us

购买了域名itisso.us,既然挖了这个坑就一定要把它填起来(•̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩́ ˑ̫ •̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩̩)。
这次我记得买了是两年,以后再续费的说。
然后我先给它做个building页面告诉大家这里还在制做。
那么我就用有生之年来做它吧。(不知Glory君意下如何),大家也许会在有生之年看到这个作品。

PS:为什么买us呢?因为com和net被一个蛋疼的不知道干什么的还有多重页面跳转的网站占了[还特么是同一家!!!!にまあ!]

[更新:建设标识页已建成]

哔~~哔~~哔~~哔~~

这是一个无聊的产物[那是相当无聊才会来做这种东西啊~]
先隆重介绍一下,这是一个可以发出声音的程序![其实就是用Beep函数。。]
然后我给它取了个好长好长名字的名字,叫“音乐灵感的来源~”

然后就上代码了

#include "iostream.h"//带上输出功能
#include "windows.h"//用Beep函数
int main(){
	int pinlv;//定义频率变量
	for(int i=0;i<1000;i++){//循环999次 pinlv=rand();//得到随机数 while(pinlv>2000){//超出了预定范围的话[频率超过一定范围声音会刺耳听不清]
			pinlv=rand();//再来得一次随机数,一直到得到范围内的数为止
		}
		Beep(pinlv,200);//哔哔哔哔哔哔~
		cout<<i<<"  "<<pinlv<<endl;//输出次数和本次的频率为多少
	}
	return 0;//结束啦
}

这是多么可爱的一个程序啊。然后我就不说什么了。。

iframe元素操作

本文所有内容均未测试,只是看着参考写出来的笔记,不保证内容的准确性,如果发现了错误请指出谢谢。

在很久很久以前(其实是忘了时间。。。)我发现iframe内部的内容是可以在iframe外面操作的。

在这之前我曾经把Glory的blog做了iframe放在我的佳佳实验室里,然后他一脸黑线,现在我终于知道是为什么了~

接下来进入正文

访问iframe元素的关键就在于要知道连接到iframe的方法,看下面

[PS:不同方法在不同浏览器里可能不可用]

继续阅读iframe元素操作

博客已顺利搬家到4ove

上上周博客在openshift所在的ip被和谐以后,我就不再打算重开应用换ip了,因为总有那么一个时候还是会被和谐的。
于是我就把博客搬到了另一个空间。

本着免费使用的原则,还是要来提一下用的空间的。

这个空间名字叫4ove,看起来用的人不多,因为速度比较快,而且这个空间看起来非常不成熟。

广告没有发现,只是请求量略大就会出来服务器的提示。。。

另外这个空间可以自定义很多东西,比如默认的404和403页面[在此类文件不起作用时],邮件系统也没问题,还有自带的邮件服务器(虽然我没用它)。另外这个空间还有很多蛋疼的地方。

[PS:只有博客被搬到了这个空间来,www.luojia.me由于还没有被和谐就暂时懒得搬过来了]

[PS2:搬家的同时我启用了storage.luojia.me来存放博客里的资源外链了]

memcache用法笔记

PS:虽然本文是我写的但是我还没有经过实验。。。如果发现了错误请留言让我修正
PS:[ ]中的都为可有可无的内容
ps:第一次给文章加这么多样式。。感慨万千吖

Memcache是一个内存存储方案[多简洁的描述啊。。]

在PHP官方有比较全面的说明文档

http://www.php.net/manual/zh/book.memcache.php【中文】

这里就来简单写一下他的数据操作部分的用法

创建一个Mencache对象

$memobj=new Memcache;
//使用函数形式的时候不需要创建这个对象

然后就可以以对象的形式对他进行操作

继续阅读memcache用法笔记

响应式布局练习

今天我稍微试了试响应式布局的操作方法来为iti做准备,于是就拿我的博客开刀了。
想了一想,这个博客的主题本身就是响应式的了,可以非常好的适应小屏幕,于是我就不再做小屏幕的响应了,于是我做了更大屏幕的响应。

级别[我做的]:800~1299,1300~1460,1461~1880,1881~+∞

由于只是练习,所以我就拿多说评论框做实验了。

目标:让多说评论框在宽度超过1300的屏幕上从文章底部跑到右边,文章靠到左边。
[请掠过代码先看下面]。 继续阅读响应式布局练习

卡西欧 fx-82es plus大bug

这篇文章原来早就应该发了,只是因为种种原因一直没有发。

这是在很久以前发现的问题。

本人测试环境:iPhone4、2G移动网络、CASIO fx-82ES Plus。
方法:打开计算器,让手机2G网进行大量的连续数据访问,紧贴在计算器上[我把手机紧贴在计算器背面],可能需要进行小幅度的手机和计算器间相对位移才可以看到最明显的效果。
显现:乱码、花屏、错误计算、卡死、得到不同的SUM值、神奇的花屏类动画
继续阅读卡西欧 fx-82es plus大bug