特殊字符的魅力

说在前面—鸭子类型

鸭子类型是动态类型的一种风格,在这种风格中,一个对象有效的语义,不是由继承自特定的类或者实现特定的接口,而是由当前方法和属性的集合决定。

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。例如,在不使用鸭子类型的语言中,我们可以编写一个函数它接受一个任意类型的对象,并调用它的方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的教方法的对象都可被函数接受的这种行为引出了以上表述。

取两次反

// 一个感叹号可以将其转换成Boolean类型的值,双感叹号将其转换成**对应**的Boolean值
!![] //true; ![] //false
!!{} //true; !{} //false
!!false //false; !false //true
!!true //true; !true //false
!!undefined //false; !undefined //true
!!null //false; !null //true
!!"" //false; !"" //true

取整同时转成数值型

/* JS里面所有的数值类型都是双精度浮点数,进行位运算是,会首先将这些数字转换为整数
* 由于鸭子类型的存在,JS将尝试位运算的所有对象尝试转化为整数(包括:NaN, undefined)
* x | 0 == x
* x ^ 0 == x
* ~~x == x
*/
'10.567890'|0 // 结果: 10 '10.567890'^0 // 结果: 10 -2.23456789|0 // 结果: -2 ~~-2.23456789 // 结果: -2 '10.56fdbas'|0 // 结果: 0
'10.56fdbas'^0 // 结果: 0
~~'10.56fdbas' // 结果: 0

日期转数值

var d = +new Date(); //1295698416792 时间戳

类数组对象转数组:

var arr = [].slice.call(arguments)

漂亮的随机码:

Math.random().toString(16).substring(2);	//14位

合并数组:

var a = [1,2,3];
var b = [4,5,6];
Array.prototype.push.apply(a, b);
console.log(a); // [1,2,3,4,5,6]

交换值:

a= [b, b=a][0];

将一个数组插入另一个数组的指定位置:

var a = [1,2,3,7,8,9];
var b = [4,5,6];
var insertIndex = 3;
a.splice.apply(a, Array.concat(insertIndex, 0, b));
// a: 1,2,3,4,5,6,7,8,9

删除数组元素:

var a = [1,2,3,4,5];
a.splice(3,1);

快速取数组最大和最小值

Math.max.apply(Math, [1,2,3]) //3
Math.min.apply(Math, [1,2,3]) //1
(出自http://ejohn.org/blog/fast-javascript-maxmin/)

条件判断:

var a = b && 1;
// 相当于
if (b) {
a = 1
} var a = b || 1;
// 相当于
if (b) {
a = b;
} else {
a = 1;
}

判断IE:

var ie = /*@cc_on !@*/false;

JS 特殊字符的魅力的更多相关文章

  1. Js特殊字符转义之htmlEscape()方法

    为了防止XSS攻击,常常需要将用户输入的特殊字符进行转义,原生js貌似还没有直接对其专业的方法,最近再读Js高级程序设计的时候刚好看到,碰巧项目中也刚好需要使用次方法,于是就之家搬来用了. 网上关于转 ...

  2. JS 特殊字符的验证的问题

    个人的JS 的收集方便下次的使用做百度查询: 1. 特殊字符的验证: var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].&l ...

  3. js特殊字符过滤

    //匹配中文 数字 字母 下划线 var checkInput = function (str) { var pattern =var pattern = /^[\w\u4e00-\u9fa5]+$/ ...

  4. HTML CSS JS 特殊字符(转义)表

    HTML有许多特殊的字符,您对此有多少了解?平时在WEB制作中,您又有用到多少?或者说你在平时使用之时,是否也会碰到,有许多特殊字符要如何打印出来?比如说“笑脸”,比如说“版权号”.要是你用时忘记了这 ...

  5. js特殊字符的验证

    // 特殊字符的验证 // 包含特殊字符返回true,不包含特殊字符返回false function checkEspcial(s) { var str=trim(s); //var reg=/< ...

  6. 格式化日期的js(正则魅力)

      /** * 时间对象的格式化; */ Date.prototype.format = function(format) { // ◆ 使用prototype定义原型方法 /* * eg:forma ...

  7. js特殊字符转义

    点的转义:. ==> \\u002E 美元符号的转义:$ ==> \\u0024 乘方符号的转义:^ ==> \\u005E 左大括号的转义:{ ==> \\u007B 左方括 ...

  8. 防止xss和sql注入:JS特殊字符过滤正则

    function stripscript(s) { var pattern = new RegExp("[%--`~!@#$^&*()=|{}':;',\\[\\].<> ...

  9. 利用Vue.js实现拼图游戏

    之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...

随机推荐

  1. 数据结构和算法 – 番外篇.时间测试类Timing

    public class Timing { //startingTime--用来存储正在测试的代码的开始时间. TimeSpan startingTime; //duration--用来存储正在测试的 ...

  2. VS2012/2013 停止调试后,无法刷新页面

  3. 重温WCF之流与文件传输(七)

    WCF开启流模式,主要是设置一个叫TransferMode的属性,所以,你看看哪些Binding的派生类有这个属性就可以了. TransferMode其实是一个举枚,看看它的几个有效值: Buffer ...

  4. 使用JDBC的addBatch()方法提高效率

    在批量更新SQL操作的时候建议使用addBatch,这样效率是高些,数据量越大越能体现出来 Statement接口里有两个方法:void     addBatch(String sql)将给定的 SQ ...

  5. GENERATED_UCLASS_BODY 和 GENERATED_BODY 区别

    the GENERATED_BODY() macro allows the class to build without having a constructor defined. If you ne ...

  6. JAVA 使用线程的几种方式

    之前放在自己网站上的例子,因为网站关闭,已经找不到了,想用的时候,没有的话又重新翻书是很麻烦的事情.所以重新记录一下,以备将来查看. 第一种,让任务类继承Runable接口,然后将任务类对象放入Thr ...

  7. 团队作业-第二周-SRS文档

    移动课堂点名的用例图:

  8. JavaScript - 变量,作用域,内存

    JavaScript 变量可以用来保存两种类型的值:基本类型值和应用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Bollean.Number和String. 所有变量都 ...

  9. C# Func<T,TResult>

    using System; namespace FuncDemo { internal class Program { private static void Main() { //类似委托功能 Fu ...

  10. 跟着鸟哥学Linux系列笔记3-第11章BASH学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...