javscript 中的术语和俚语
语言中俚语和方言。在JavaScript中也有一些俚语或者说是术语,看似奇淫巧技,还是有一些用处,有三种语言组件可以来构造术语:强转、逻辑运算符和位变换。
1、强转:在javascript和大部分的语言中,强转是指强制将一种类型的对象或者实体转成另外一种的行为
- 1.转成String
- var d = ' ' + 0;
- console.log(d); //'0'
- 2.转成数字
- console.log(+'10')//10
- console.log(+new Date()) //时间戳 1471493169160
- console.log(new Date() + '') //Thu Aug 18 2016 12:06:49 GMT+0800 (中国标准时间)
- 3.复杂的强转
- ++[[]][+[]]+[+[]] //'10'
- [[]] // =>[Array[0]]
- [+[]] // =>[0] 就是0
- 1 + [0] //=>10
2.逻辑运算符
- 1.通过比较或隐式回退赋值
- && 可以避免报错 当赋值语句来用
- || 可以用来填加默认值 name = arg [0] || "dfd"
- ! 转换成布尔值来做捷径
- 1.console.log(!0) // true
- 2.console.log(!1) //false
- 3.console.log(!-1) //false
- 4.console.log(!'0')//false
- 5.console.log(!'1')//false
- 6.console.log(!undefined)//true
- 7.console.log(!this)//false
- 8.console.log(!+[]) // true
- 9.console.log(![][![]])//true
- 10.console.log(!null)//true
- .双重否
- !!
- 如果是真就输出真,如果是null和undefined就!null 就是false false直接输入false,避免报错。
- var user = {
- isAdmin: function(){
- return !! this.admin
- }
- } ;
- console.log(user.isAdmin()) //false !! undefined => !true =>false
- user.admin = true;
- console.log(user.isAdmin()) //true !!true => !false =>true
- user.admin = false;
- console.log(user.isAdmin()) //false !!false => !true =>false
- 3.立即调用函数
- !function(){console.log('foo')}(); //=> foo
3.位变换
- 1. &
- 两个操作数进行按位与操作时,如果两个操作数在某个特定的位置都为1,那么按位与返回1
- Hex转换为RGB
- var color = 0xC0FFEE;
- console.log((color>>16) & 0xFF) //192 red
- 2. |
- 两个操作数进行按位与操作时,如果两个操作数在某个特定的位置任意一个为1,那么按位与返回1
- 数字截断,用来舍入数字
- var x = (30.9 | 0);
- console.log(x); //=> 30
- 3. ^
- 是一种判断两个操作数是否具有相反符号的简单方法
- 1、符号判等
- var signsMatch = function(x,y){
- return !((x ^ y) < 0);
- };
- console.log(signsMatch(10, 10)); //fasle
- console.log(signsMatch(0, 0)); //true
- console.log(signsMatch(-10, -10)); //true
- 2.翻转位
- 可以用来切换对象的状态是非常有用。
- var light = {
- on:1,
- toggle: function(){
- return this.on ^=1;
- }
- }
- console.log(light.toggle()) //=>0
- console.log(light.toggle()) //=>1
- console.log(light.toggle()) //=>0
- 4.~
- 非 ,按位非从功能上说,基本是讲一个数字的符号进行反转,然后在减1.
- 1.按位运算
- ~-10 // =>9
- -~10 //=>11
- 2*~-10 // =>18
- 2.字符串转数字
- var num = “100.7”
- console.log(parseInt(num,10) === ~~num) //true
4.一些难懂的代码
- 1、暗中的eval
- ““[”sub”]["constructor"](""console.log('foo')")()
- //=>foo
- 2.进制
- 当比较不同进制的数字是要保持小心。比如比较八进制和十进制和科学计数
- 1+ 064 == 65 //false
- 064 > 60 //false
- 30000000>4e9 //false
- 3.Unicode编码的变量
- 在javascript中允许使用Unicode用作属性描述符和变量名,
- var \u1000 = {\u1001: function(){
- return 'Unicode'
- }
- }
- console.log(\u1000.\u1001()) //'Unicode'
- false => ![]
- true => !![]
- undefined => [][[]]
- NaN => +[![]]
- 0 => +[]
- 1 => +!+[]
- 2 => !+[]+!+[]
- 10 => [+!+[]]+[+[]]
- Array => []
- Number => +[]
- String => []+[]
- Boolean => ![]
- Function => []["filter"]
- eval => []["filter"]["constructor"]( CODE )()
- window => []["filter"]["constructor"]("return this")()
- [][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
- 上面的代码是 alert(2)
具体的网站可以访问:http://www.jsfuck.com/
javscript 中的术语和俚语的更多相关文章
- Oracle EBS Web ADI 中的术语
Oracle EBS Web ADI 中的术语 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 异步调用异步调用是这样子的,和引入接口表中的数 ...
- GA中的术语及经常分析的指标
GA中的术语 跳出客流:只浏览了网站的一个页面,并且没有进一步动作的访客目标转化:通常缩写为目标或转化,这是网站上面的一个预期或动作,通常被认为比标准网页更有价值,例如:"确认购买" ...
- kafka 中的术语
出处:https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html table th:first-of-type { width: 7 ...
- YARN/MRv2 中基本术语介绍
YARN/MRv2是下一代MapReduce框架(见Hadoop-0.23.0),该框架完全不同于当前的MapReduce框架,它在扩展性,容错性和通用性等方面更出色,据统计,Yarn有超过15000 ...
- C语言中一些术语的梳理_持续更新
关键字.标识符.宏.预定义.预处理.编译.替换.预处理指令. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 标识符: ...
- 程序开发中的术语,如IDE,OOP等等
我们在开发程序过程中,会用到一些与编译有关的术语,比如:[编辑器.编译器.调试器.连接器,链接器.解释器,集成开发环境(Integrated Development Environment,IDE). ...
- 游戏贴图中常用术语《DC》的理解
什么是DC呢? 在GDI中,DC(Device Context)是一个非常重要的概念. 有的书中,将DC翻译为设备描述表,也有的书中翻译为设备上下文. 但是这些翻译,无法在我们的头脑里有强烈的冲击,无 ...
- C++中的术语
1 声明式:所谓声明式是告诉编译器某个东西的名称和类型,但忽略细节.下面都是声明式: extern int x; //对象(object)声明式 记住:变量的声明加extern关键字 std::siz ...
- C# 基础中有关术语理解
一.栈vs堆 深入理解堆栈.堆在内存中的实现 二.Socket 深入探析c# Socket 三.多线程 c# 多线程 --Mutex(互斥锁)
随机推荐
- paramter的添加
public string GetUserIdByName(string UserName, string pwd) { string sql = @"select Na ...
- 20145337《Java程序设计》第四周学习总结
20145337<Java程序设计>第四周学习总结 教材学习内容总结 继承与多态 继承 继承,避免多个类间重复定义共同行为 符合DRY(Don't Repeat Yourself)原则,多 ...
- BizTalk开发系列(三十七) 性能监视器在BizTalk性能测试中的使用
BizTalk应用程序的性能测试和分析是一个非常重要的过程,因为BizTalk的应用程序在Run-time时受部署结构.消息请求数量和消息大小等 的影响很大,因此无论是简单还是复杂的的应用都需要在部署 ...
- Android课程---Android Studio的一些小技巧
APK瘦身 在Android Studio中我们可以开启混淆,和自动删除没有Resources文件,来达到给APP瘦身的目的,这对于一些维护很久的老项目比较有用,里面有很多无效的Resource, 删 ...
- EmguCV 一些结构
一.MCvTermCriteria epsilon Epsilon max_iter Maximum iteration type CV_TERMCRIT value 二.MCvScalar vo T ...
- 使用SharpSSH连接服务器报Algorithm negotiation fail解决办法
SharpSSH或JSCH使用diffie-hellman-group1-sha1和diffie-hellman-group-exchange-sha1密钥交换算法,而OpenSSH在6.7p1版本之 ...
- window.self ->window.top->window.parent
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...
- mysql单表多timestamp的current_timestamp设置问题
一个表中出现多个timestamp并设置其中一个为current_timestamp的时候经常会遇到 1293 - Incorrect table definition; there can be o ...
- Sqlserver2008和Oracle分页语句
SqlServer 分页语句 select StuID ,StuNo,StuName,Age,Sex, ClassName ClassName from (select *, row_number() ...
- xx.substring(x,x)和xx.index()
[转的]用一个例子解释: ip = "126.168.1.1"; i = ip.indexOf('.'); 这里默认从0开始找到 ...