语言中俚语和方言。在JavaScript中也有一些俚语或者说是术语,看似奇淫巧技,还是有一些用处,有三种语言组件可以来构造术语:强转、逻辑运算符和位变换。

1、强转:在javascript和大部分的语言中,强转是指强制将一种类型的对象或者实体转成另外一种的行为

  1. 1.转成String
  2. var d = ' ' + 0;
  3. console.log(d); //'0'

  

  1. 2.转成数字
  2. console.log(+'10')//10
  3.  
  4. console.log(+new Date()) //时间戳 1471493169160
  5.  
  6. console.log(new Date() + '') //Thu Aug 18 2016 12:06:49 GMT+0800 (中国标准时间)

  

  1. 3.复杂的强转
  2. ++[[]][+[]]+[+[]] //'10'
  3.  
  4. [[]] // =>[Array[0]]
  5.  
  6. [+[]] // =>[0] 就是0
  7.  
  8. 1 + [0] //=>10

2.逻辑运算符

  1. 1.通过比较或隐式回退赋值
  2. && 可以避免报错 当赋值语句来用
  3. || 可以用来填加默认值 name = arg [0] || "dfd"
  4. ! 转换成布尔值来做捷径
  5.  
  6. 1.console.log(!0) // true
  7. 2.console.log(!1) //false
  8. 3.console.log(!-1) //false
  9. 4.console.log(!'0')//false
  10. 5.console.log(!'1')//false
  11. 6.console.log(!undefined)//true
  12. 7.console.log(!this)//false
  13. 8.console.log(!+[]) // true
  14. 9.console.log(![][![]])//true
  15. 10.console.log(!null)//true

  

  1. .双重否
  2. !!
  3. 如果是真就输出真,如果是nullundefined就!null 就是false false直接输入false,避免报错。
  4. var user = {
  5. isAdmin: function(){
  6. return !! this.admin
  7. }
  8. } ;
  9.  
  10. console.log(user.isAdmin()) //false !! undefined => !true =>false
  11.  
  12. user.admin = true;
  13. console.log(user.isAdmin()) //true !!true => !false =>true
  14.  
  15. user.admin = false;
  16. console.log(user.isAdmin()) //false !!false => !true =>false
  1. 3.立即调用函数
  2. function(){console.log('foo')}(); //=> foo

3.位变换

  1. 1. &
  2. 两个操作数进行按位与操作时,如果两个操作数在某个特定的位置都为1,那么按位与返回1
  3. Hex转换为RGB
  4. var color = 0xC0FFEE;
  5.  
  6. console.log((color>>16) & 0xFF) //192 red
  7.  
  8. 2. |
  9. 两个操作数进行按位与操作时,如果两个操作数在某个特定的位置任意一个为1,那么按位与返回1
  10. 数字截断,用来舍入数字
  11. var x = (30.9 | 0);
  12. console.log(x); //=> 30

  

  1. 3. ^
  2. 是一种判断两个操作数是否具有相反符号的简单方法
  3. 1、符号判等
  4. var signsMatch = function(x,y){
  5.   return !((x ^ y) < 0);
  6. };
  7.  
  8. console.log(signsMatch(10, 10)); //fasle
  9.  
  10. console.log(signsMatch(0, 0)); //true
  11.  
  12. console.log(signsMatch(-10, -10)); //true
  13.  
  14. 2.翻转位
  15.  
  16. 可以用来切换对象的状态是非常有用。
  17.  
  18. var light = {
  19. on:1,
  20. toggle: function(){
  21. return this.on ^=1;
  22. }
  23. }
  24.  
  25. console.log(light.toggle()) //=>0
  26. console.log(light.toggle()) //=>1
  27. console.log(light.toggle()) //=>0

  

  1. 4.~
  2. ,按位非从功能上说,基本是讲一个数字的符号进行反转,然后在减1.
  3.  
  4. 1.按位运算
  5. ~-10 // =>9
  6.  
  7. -~10 //=>11
  8.  
  9. 2*~-10 // =>18
  10.  
  11. 2.字符串转数字
  12. var num = 100.7
  13.  
  14. console.log(parseInt(num,10) === ~~num) //true

4.一些难懂的代码

  1. 1、暗中的eval
  2.  
  3. ““[”sub”]["constructor"](""console.log('foo')")()
  4.  
  5. //=>foo

  

  1. 2.进制
  2. 当比较不同进制的数字是要保持小心。比如比较八进制和十进制和科学计数
  3.  
  4. 1+ 064 == 65 //false
  5. 064 > 60 //false
  6. 30000000>4e9 //false
  7.  
  8. 3.Unicode编码的变量
  9. javascript中允许使用Unicode用作属性描述符和变量名,
  10.  
  11. var \u1000 = {\u1001: function(){
  12. return 'Unicode'
  13. }
  14. }
  15.  
  16. console.log(\u1000.\u1001()) //'Unicode'

  

  1. false => ![]
  2. true => !![]
  3. undefined => [][[]]
  4. NaN => +[![]]
  5. 0 => +[]
  6. 1 => +!+[]
  7. 2 => !+[]+!+[]
  8. 10 => [+!+[]]+[+[]]
  9. Array => []
  10. Number => +[]
  11. String => []+[]
  12. Boolean => ![]
  13. Function => []["filter"]
  14. eval => []["filter"]["constructor"]( CODE )()
  15. window => []["filter"]["constructor"]("return this")()

  

  1. [][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
  1. 上面的代码是 alert(2)

  具体的网站可以访问:http://www.jsfuck.com/

javscript 中的术语和俚语的更多相关文章

  1. Oracle EBS Web ADI 中的术语

    Oracle EBS Web ADI 中的术语 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 异步调用异步调用是这样子的,和引入接口表中的数 ...

  2. GA中的术语及经常分析的指标

    GA中的术语 跳出客流:只浏览了网站的一个页面,并且没有进一步动作的访客目标转化:通常缩写为目标或转化,这是网站上面的一个预期或动作,通常被认为比标准网页更有价值,例如:"确认购买" ...

  3. kafka 中的术语

    出处:https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html table th:first-of-type { width: 7 ...

  4. YARN/MRv2 中基本术语介绍

    YARN/MRv2是下一代MapReduce框架(见Hadoop-0.23.0),该框架完全不同于当前的MapReduce框架,它在扩展性,容错性和通用性等方面更出色,据统计,Yarn有超过15000 ...

  5. C语言中一些术语的梳理_持续更新

    关键字.标识符.宏.预定义.预处理.编译.替换.预处理指令. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 标识符: ...

  6. 程序开发中的术语,如IDE,OOP等等

    我们在开发程序过程中,会用到一些与编译有关的术语,比如:[编辑器.编译器.调试器.连接器,链接器.解释器,集成开发环境(Integrated Development Environment,IDE). ...

  7. 游戏贴图中常用术语《DC》的理解

    什么是DC呢? 在GDI中,DC(Device Context)是一个非常重要的概念. 有的书中,将DC翻译为设备描述表,也有的书中翻译为设备上下文. 但是这些翻译,无法在我们的头脑里有强烈的冲击,无 ...

  8. C++中的术语

    1 声明式:所谓声明式是告诉编译器某个东西的名称和类型,但忽略细节.下面都是声明式: extern int x; //对象(object)声明式 记住:变量的声明加extern关键字 std::siz ...

  9. C# 基础中有关术语理解

    一.栈vs堆  深入理解堆栈.堆在内存中的实现 二.Socket 深入探析c# Socket 三.多线程 c# 多线程 --Mutex(互斥锁)

随机推荐

  1. paramter的添加

    public string GetUserIdByName(string UserName, string pwd)    {        string sql = @"select Na ...

  2. 20145337《Java程序设计》第四周学习总结

    20145337<Java程序设计>第四周学习总结 教材学习内容总结 继承与多态 继承 继承,避免多个类间重复定义共同行为 符合DRY(Don't Repeat Yourself)原则,多 ...

  3. BizTalk开发系列(三十七) 性能监视器在BizTalk性能测试中的使用

    BizTalk应用程序的性能测试和分析是一个非常重要的过程,因为BizTalk的应用程序在Run-time时受部署结构.消息请求数量和消息大小等 的影响很大,因此无论是简单还是复杂的的应用都需要在部署 ...

  4. Android课程---Android Studio的一些小技巧

    APK瘦身 在Android Studio中我们可以开启混淆,和自动删除没有Resources文件,来达到给APP瘦身的目的,这对于一些维护很久的老项目比较有用,里面有很多无效的Resource, 删 ...

  5. EmguCV 一些结构

    一.MCvTermCriteria epsilon Epsilon max_iter Maximum iteration type CV_TERMCRIT value 二.MCvScalar vo T ...

  6. 使用SharpSSH连接服务器报Algorithm negotiation fail解决办法

    SharpSSH或JSCH使用diffie-hellman-group1-sha1和diffie-hellman-group-exchange-sha1密钥交换算法,而OpenSSH在6.7p1版本之 ...

  7. window.self ->window.top->window.parent

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

  8. mysql单表多timestamp的current_timestamp设置问题

    一个表中出现多个timestamp并设置其中一个为current_timestamp的时候经常会遇到 1293 - Incorrect table definition; there can be o ...

  9. Sqlserver2008和Oracle分页语句

    SqlServer 分页语句 select StuID ,StuNo,StuName,Age,Sex, ClassName ClassName from (select *, row_number() ...

  10. xx.substring(x,x)和xx.index()

    [转的]用一个例子解释: ip = "126.168.1.1"; i = ip.indexOf('.');                           这里默认从0开始找到 ...