转到正文

浪淘沙

静观己心,厚积薄发

存档

2013 年 5 月 的存档

原文地址:http://www.jb51.net/article/35892.htm


//问题比如:7*0.8 JavaScript算出来就是:5.6000000000000005

//加法函数,用来得到精确的加法结果
//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
//调用:accAdd(arg1,arg2)
//返回值:arg1加上arg2的精确结果
function accAdd(arg1, arg2) {
    var r1, r2, m;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
    m = Math.pow(10, Math.max(r1, r2))
    return (arg1 * m + arg2 * m) / m
}
//用法:
//给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.add = function (arg) {
    return accAdd(arg, this);
}
//如:
var t1 = 6.60;
var t2 = 1.32;
var t3 = 1.2;
var t4 = 1.2;
var t5 = 1.2;
alert(Number(t1).add(Number(t2)).add(Number(t3)).add(Number(t4)).add(Number(t5)));

//减法函数,用来得到精确的减法结果
function Subtr(arg1, arg2) {
    var r1, r2, m, n;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
    m = Math.pow(10, Math.max(r1, r2));
    //last modify by deeka
    //动态控制精度长度
    n = (r1 >= r2) ? r1 : r2;
    return ((arg1 * m - arg2 * m) / m).toFixed(n);
}

//乘法函数,用来得到精确的乘法结果
//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//调用:accMul(arg1,arg2)
//返回值:arg1乘以arg2的精确结果
function accMul(arg1, arg2) {
    var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    try { m += s1.split(".")[1].length } catch (e) { }
    try { m += s2.split(".")[1].length } catch (e) { }
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
}
//用法:
//给Number类型增加一个mul方法,调用起来更加方便。
Number.prototype.mul = function (arg) {
    return accMul(arg, this);
}

//除法函数,用来得到精确的除法结果
//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//调用:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精确结果
function accDiv(arg1, arg2) {
    var t1 = 0, t2 = 0, r1, r2;
    try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
    try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
    with (Math) {
        r1 = Number(arg1.toString().replace(".", ""))
        r2 = Number(arg2.toString().replace(".", ""))
    return (r1 / r2) * pow(10, t2 - t1);
    }
}
//用法:
//给Number类型增加一个div方法,调用起来更加方便。

原文地址:http://www.jb51.net/article/35892.htm

原文地址:http://thihy.iteye.com/blog/1867577

网上有很多帖子讨论浮点数的精度问题,其中有如下命题:
  1. 0.2+0.4=0.600 000 000 000 000 1
  2. 0.58*10=5.8,但0.58*100=57.999 999 999 999 990.58*1000=580

原文地址:http://www.csdn.net/article/2013-05-08/2815182-javascript-this

其实如果完全掌握了this的工作原理,自然就不会走进这些坑。来看下以下这些情况中的this分别会指向什么:

1.全局代码中的this


alert(x);// 全局变量值为2

全局范围内的this将会指向全局对象,在浏览器中即使window继续阅读

原文地址:http://thihy.iteye.com/blog/1777065

本文是在学习正则表达式过程中整理的,虽然冠以教程,但实际上应该算是学习笔记。整篇文章需要对正则有一定的理解。。如果有啥写得不对的,或者写得不够清楚的,欢迎大家留言讨论。

概述

正则表达式(Regular Expression)是高效的、便捷的文本处理工具,能够快速查询符合某种规范的文本。

例如:[0-9]{3}可以匹配3位数字,[a-z]{3}则可以匹配3个小写字母。

目前正则表达式被众多工具所支持,比如egrepsedperlrubyJavaC#pythonTcl等,不同的工具下,正在表达式的范式可能会有略微的差别,执行引擎也可能不同。目前,正则引擎主要有:DFA, 传统型NFA, POSIX NFA, DFA/NFA混合。本文主要介绍Java正则表达式,它的引擎属于传统型NFA

Java正则支持Unicode,它在适当的时候,会使用java.lang.Character.codePointAt(CharSequence seq, int index)获取Code Point,而不是char继续阅读

地址如下:

各自用一句话来概括MVC、MVP、MVVM的差异特点

一次Ajax查错的经历

各大类库的类工厂

我的MVVM框架 v1发布

less源码学习

“计算机之子”的MVVM框架源码学习笔记

[译]JavaScript中的稀疏数组与密集数组

原文地址:http://www.cnblogs.com/rubylouvre/archive/2012/12/15/2818973.html

你有没有对“在复杂的JSON数据结构中查找匹配内容”而烦恼。这里有8种不同的方式可以做到:

JsonSQL

JsonSQL实现了使用SQL select语句在json数据结构中查询的功能。

例子:

jsonsql.query("select * from json.channel.items order by title desc",json);

主页:http://www.trentrichardson.com/jsonsql/

JSONPath

JSONPath就像是针对JSON数据结构的XPath。

例子:

jsonPath( books, '$..book[(@.length-1)]')

主页:http://goessner.net/articles/JsonPath/

jfunk

jFunk允许你检索(很快会加入管理功能)复杂的JSON或Javascript对象。jFunk API的设计几乎与jQuery API类似。它直接复制了jQuery的API,除了那些针对DOM的API。

例子:

Jf("> vegetables > *[color=Orange]",Food).get();

主页:http://code.google.com/p/jfunk/

TaffyDB

你过去有没有注意到Javascript对象的字面值看起来很像记录?如果你把他们包裹在一个数组里面,那么它们看起来有没有像一个数据库表?TaffyDB是一个Javascript库,它提供了强大的数据库功能以实现之前的想法,大大改善了你在Javascript中使用数据的方式。

var kelly = friends({id:2}).first();

主页:http://www.taffydb.com/

linq.js

linq.js——Javascript中的LINQ(译者注:.Net中的概念,见http://msdn.microsoft.com/zh-tw/library/bb397897

例子:

var queryResult2 = Enumerable.From(jsonArray)

.Where("$.user.id < 200")

.OrderBy("$.user.screen_name")

.Select("$.user.screen_name + ':' + $.text")

.ToArray();

主页:http://linqjs.codeplex.com/

主页:http://neue.cc/reference.htm

objeq

objeq是一个简单的库,实现了对POJSO(Plain-Old JavaScript Objects,普通的Javascript对象)的实时查询。

例子:

var res = $objeq(data, "age > 40 && gender == 'female' -> name");

// --> Returns ['Jessica']

主页:https://github.com/agilosoftware/objeq

(译注:它使用了Javascript的property setters,所以它只能工作在较新的浏览器上)

json:select()

使用类CSS选择符来查询JSON。

例子:

.lang:val("Bulgarian") ~ .level

主页:http://jsonselect.org/#tryit

Paul的编程珠玑中的Javascript数组过滤方法
例子:

var a = [1,2,3,4,5,6,7,8,9,10];
// return everything
a.where( "( ) => true" ) ;
//  --> [1,2,3,4,5,6,7,8,9,10]
// return even numbers
a.where( "( n, i ) => n % 2 == 0" ) ;
//  --> [2,4,6,8,10]
// query first 6 products whose category begins with 'con' using extra param and regular expression
 products.where( "( el, i, res, param ) => res.length <= 6 && param.test( el.cat )", /^con/i);
// using customer table data from SQL Server's northwind database...
customers.where( "( el, i, res, param ) => el.country == param", "USA" );

原文地址:http://www.cnblogs.com/rubylouvre/archive/2012/12/15/2818973.html

原文地址:http://www.iteye.com/topic/1130452

Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料。

关于Jsonp更详细的资料请参考http://baike.baidu.com/view/2131174.htm,下面给出例子:

一.客户端

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
        <script type="text/javascript" src="resource/js/jquery-1.7.2.js"></script>
    </head>
    <script type="text/javascript">
        $(function(){
            /*//简写形式,效果相同
            $.getJSON("http://app.example.com/base/json.do?sid=1494&busiId=101&jsonpCallback=?",
            function(data){$("#showcontent").text("Result:"+data.result)});*/
                $.ajax({
                    type : "get",
                    async:false,
                    url : "http://app.example.com/base/json.do?sid=1494&busiId=101",
                    dataType : "jsonp",//数据类型为jsonp
                    jsonp: "jsonpCallback",//服务端用于接收callback调用的function名的参数
                    success : function(data){
                        $("#showcontent").text("Result:"+data.result)
                    },
                    error:function(){
                        alert('fail');
                    }
                });
            });
    </script>
    <body>
        <div id="showcontent">Result:</div>
    </body>
</html>

二.服务器端

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ExchangeJsonController {
    @RequestMapping("/base/json.do")
    public void exchangeJson(HttpServletRequest request,HttpServletResponse response) {
        try {
            response.setContentType(text/plain);
            response.setHeader("Pragma", "No-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);
            Map<String,String> map = new HashMap<String,String>();
            map.put("result", "content");
            PrintWriter out = response.getWriter();
            JSONObject resultJSON = JSONObject.fromObject(map); //根据需要拼装json
            String jsonpCallback = request.getParameter("jsonpCallback");//客户端请求参数
            out.println(jsonpCallback+"("+resultJSON.toString(1,1)+")");//返回jsonp格式数据
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

原文地址:http://www.iteye.com/topic/1130452

原文地址:http://dzh.mop.com/shzt/20130109/0/Fg8S8lI2b64139F5.shtml

当时公司招了大批应届本科和研究生毕业的新新人类。平均年龄25岁。那个新的助理,是经过多次面试后,我亲自招回来的一个女孩。名牌大学本科毕业,聪明, 性格活泼。私下里我得承认,我招她的一个很重要的原因,除了她在大学里优秀的表现之外,还因为她写了一手漂亮的字。女孩能写一手好字的不多,尤其像她,看 起来长发飘飘,多么女性化的一个姑娘,一手字却写的铿锵倜傥,让我对她不由多了很多好感。
手把手的教。从工作流程到待人接物。她也学的快。很多工作一教就上手。一上手就熟练。跟各位同事也相处的颇融洽。我开始慢慢的给她一些协调的工作,各部门之间以及各分公司之间的业务联系和沟通让她尝试着去处理。

开始经常出错。她很紧张,来找我谈。我告诉她:错了没关系,你且放心按照你的想法去做。遇到问题了,来问我,我会告诉你该怎么办。仍然错。又来找我,这次谈的比较深入,她的困惑是,为什么总是让她做这些琐碎的事情?我当时问她:什么叫做不琐碎的工作呢?
她答不上来,想了半天,跟我说:我总觉得,我的能力不仅仅能做这些,我还能做一些更加重要的事情。那次谈话,进行了1小时。我知道,我说的话,她没听进去多少。后来我说,先把手头的工作做好,先避免常识性错误的发生。然后循序渐进罢。
继续阅读

Array Operators

$a + $b Union Union of $a and $b.
The + operator returns the right-hand array appended to the left-hand array; for keys that exist in both arrays, the elements from the left-hand array will be used, and the matching elements from the right-hand array will be ignored.
<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");

$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);

$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);

继续阅读

php为function传递参数的时候,可以按值传递(Passing by Reference),也可以按引用传递。这两种传递方式唯一的区别就是,按值传递的花,再function内部的修改只会保留在function内部,而在function外部不会体现出参数的修改,而按引用传递的话,所有再function内部修改的内容都会保留下来。

如果声明function的时候参数为按值传递,但是再call-time的时候使用按引用传递的话就会就会触发一个E_DEPRECATED级别的错误提示。直接上代码


function passByReference($ori_arr)
{
$ori_arr['hello'] = 'world';
}

$test = array('test' => 'test string');
passByReference(&$test);

//get a warning saying that "call-time pass-by-reference" is deprecated when you use & in foo(&$a);. And as of PHP 5.4.0, call-time pass-by-reference was removed, so using it will raise a fatal error.

var_export($test);

继续阅读