`
jj7jj7jj
  • 浏览: 50052 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

js世界里的诡异和离奇

阅读更多
num1:
    ba = function(a) {
        return a.call.apply(a.bind, arguments)
    }

(以上的代码出之于google的adsence广告投放的代码)

单纯的call和apply其实好解释,但如果想上面这样写,就有点绕了。

下面来分析上面这种写法
<script>
	var obj = { name : "cc"};
	var fun = function(){ 
		alert(1);
	};
	var fun2 = function(){ 
		alert(2);
	};
	
	alert(fun.call);
	alert(fun.call.apply);
    //c = fun2.call.apply(obj, ["123",12,676]);
    //error:Function.prototype.call called on incompatible [object Object]
	c = fun2.call.apply(obj, ["123",12,676]);
    //alert:1,arguments:[0] = 12 [1] = 676,this:"123"
</script>


得到以下结论:
1.fun2.call.apply相当于Function.prototype.call.apply
2.fun2.call.apply第一个参数是不能为obj,因为只有Function对象才有此方法,
3.fun2.call.apply(fun, ["123",12,676])可以简化为fun.call("123",12,676所以fun2.call其实只是浮云,call只能function才能调用,也揭示了call的底层实现:将第一个参数作为fun(call的调用者)的this,其他的作为参数

a.call.apply(a.bind, arguments)在看这段,为什么要这样写?
在于作者想让arguments里面第一个参数取代a.bind里面的this,那么可以这样:
var o = [].shift.call(arguments);
a.bind.apply(o,arguments);
这么说这句的目的有这些:简洁,犀利,你看不懂,作者很牛B,这还仅仅只是google投放的前10行里面的内容,哭啊~~~


num2
js获取函数调用者的函数名(原创)
(function(){
    B();
})()
function B(){
   var fun = arguments.callee.caller ? arguments.callee.caller : window;
   var fun_name = /^function\s+([^\(]*)\(/.exec(fun+"");
   fun_name = fun_name ? fun_name : "";
   alert(fun);
   alert(fun_name);
}

num3
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__ [_+~$]+$_[_]+$$](_/_)



这句没出我意料的话,你应该没看懂,这句的结果输出的alert(1);


解析:
$=[] //$ : []

!$ //false
!$ + [] // false
(小结:[].toString()//"",-[]//0,[].valueOf()//[],这种结果显然[]直接调用的toString了,这里就牵涉到隐式转化问题,如果两个都不数字就当做字符串处理,所以结果是"false",由此确定第二个变量__ : "false")
~$ //-1
(小结: $:[[]], ~$,-$,+$相当于~"",-"",+""//结构都是-1,0,0可以暂时下个结论,数组参与数值运算的时候,都会转化成字符串在进行计算,但是-[1]//-1,-[1,2]//NaN,-[]//0 当只有一个数据的时候数组会原样输出,没有默认为0,现在后者站得住脚一些)
-~-~-~$//3
(小结:类似的方法可以求数组下标)
{}+$ //[object Object]
(小结,$ + {}//[object Object] )
!''//true
$$=($_=!''+$)[_/_]+$_[+$])]//"true"[1] + "true"[0] : "rt"
[_/_]//1


通过上述分析 得出:
$ == 未知
$$ == "rt"
$_ == "true"
_ == 3
__ == "false"

(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])简化为:
("false")[3] + ("[object Object]")[1] + ("true")[1] + "true"[0]
即 : "s" + "o" + "r" + "t" //"sort"

($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])() 简化为:
($=[]["sort"])()

$ == sort(Fun)
相当于给window对象增加了sort属性,而且sort返回的是this对象,这样就可以产生window对象,相当巧妙的地方


[__[_/_]+__ [_+~$]+$_[_]+$$](_/_)  简化为:
["false"[1] + "false"[2] + "true"[3] + "true"](1)
["a" + "l" + "e" + "rt"](1) //"[alert](1)"

window["sort"]()["alert"](1) -> window["alert"](1)

这种模糊代码的方式和手段很不错,值得借鉴和参考,可以越过脚本过滤,执行你想执行的

num4
document.write问题
<script>
document.write("<div id=\"webs\"></div>");
var ele = document.getElementById("webs");
alert(ele); //null
</script>

这结果有点纳闷,今天问了鹏哥才知道,原来document.write真正写入的时间是在当前script执行完之后才进行写入,所以在getElementById是不存在此元素的

处理方法:
<script>
document.write("<div id=\"webs\"></div>");
</script>
<script>
var ele = document.getElementById("webs");
alert(ele); //div
</script>


num5
for (var j = 0, len = d.length >>>0; j < len; j++) {...

今天看鹏哥里面有样一种写法d.length >>>0,第一次见过这种写法有点诧异,后来问了一下,这种写法的好处在于如果d.length假设为undefined会自动变为0,如果存在则任是d.length,利用了js里面隐身转化

num6
世上最短判断ie浏览器的方法
var ie = !-[1,]

only 6byes,这种写法真是犀利的很啊
1
0
分享到:
评论
1 楼 achun 2011-09-05  
学习了,!!!

相关推荐

    我一个程序员的离奇经历

    标题中的“我一个程序员的离奇经历”暗示了一个故事,可能是关于编程、软件开发或技术...这些情况都是对程序员可能遇到的离奇经历的想象,每一个都包含了大量的技术细节和解决问题的过程,体现了IT行业的复杂性和魅力。

    处理器的离奇故障一例.pdf

    处理器的离奇故障一例.pdf

    小学数学数学神探离奇的敲诈案

    小学数学数学神探离奇的敲诈案

    Javascript常用效果.rar

    JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责处理客户端的交互和动态效果。在这个名为"Javascript常用效果.rar"的压缩包中,包含了一系列与JavaScript相关的实用效果,这些效果能够提升网站...

    高中历史之历史百科一战时离奇的“圣诞休战”英德两军战地联欢素材

    高中历史之历史百科一战时离奇的“圣诞休战”英德两军战地联欢素材

    [精选]九鼎的三板游戏再现离奇交易神秘PE投资人浮出水面.pptx

    [精选]九鼎的三板游戏再现离奇交易神秘PE投资人浮出水面.pptx

    离奇的CPU插座氧化故障.pdf

    本文主要讨论了两个与计算机硬件和软件相关的故障案例,分别是CPU插座氧化故障导致的电脑无法启动问题以及更新BIOS导致的网络连接故障。 首先,CPU插座氧化故障是一个不常见的问题,但可能导致电脑无法启动。CPU...

    2020_2021学年高中历史课时分层作业23流派纷呈的世界美术北师大版必修3

    这篇资料主要围绕高中历史课程中的世界美术流派展开,涵盖了印象派、现实主义、新古典主义和现代主义等重要艺术风格。以下是对这些知识点的详细解释: 1. 印象派:以莫奈的《伦敦国会大厦》为例,印象派兴起于19...

    HSK标准教程6下 课件 L24.pptx

    HSK标准教程6下课件L24主要讲述了体育明星们的离奇遭遇,包括他们在体育比赛中的离奇经历和遭遇。通过学习这节课,学生可以学习到一些关键词汇,例如猫头鹰、警示牌、电钻、离奇冲击、拼搏、聚精会神、崇拜、火箭、...

    日本每年近1.6万人“离奇消失”,他们去了哪儿?

    8. 社区支持与服务:为了减轻认知症对个人和家庭的影响,日本正在发展社区支持服务,如监控系统、日间照料中心和专门的护理团队,旨在提供全方位的支持,确保患者的安全和生活质量。 总结:日本的认知症问题不仅是...

    高中历史第四单元近代以来世界的科学发展历程第11课物理学的重大进展同步测试新人教版必修3201805252159

    3. **量子论** - 普朗克的量子假说开启了量子力学的大门,揭示了微观粒子行为的离奇性质,如波粒二象性和不确定性原理。这为理解原子和分子级别的物理现象提供了关键。 4. **光的性质** - 牛顿的光的色散原理说明...

    大宇神秘惊奇阅读感悟与心得范文.docx

    大宇的每一次冒险,无论是面对“怪笑树”的诡异事件,还是遭遇其他离奇的谜团,都展现了他的勇气和智慧。他的伙伴们,如刘畅、李伦和赵勇,各有特色,他们的互动增添了故事的趣味性和深度。 《怪笑树》这个故事特别...

    javascript获取选中的文本的方法代码.docx

    除了上述介绍的方法外,还可以探索更多与文本操作相关的JavaScript技巧和技术,例如: - **正则表达式的使用**:用于文本搜索和替换。 - **DOM操作**:通过JavaScript操纵文档对象模型(DOM)来修改页面内容。 - **...

    聊聊 Linux 那些离奇的磁盘满问题

    文章目录一、被忽略的隐藏文件1、认识 swapfile2、处理建议二、未释放的已删除文件1、du 和 df 不一致2、处理建议三、挂载引发的悬案1、消失的空间2、处理建议2.1 解决方法2.2 测试验证2.3 给个建议 对于 Linux ...

    世界最佳创意思维培训教程.doc

    性思维和头脑风暴技巧融入日常生活和工作,是提升个人及团队创新能力的关键。《头脑风暴》教程旨在揭示这一过程,让每个读者都能掌握创新思维的方法。 首先,我们需要理解创意的本质。创意并非只属于天才,而是每个...

    朝霞被怪兽吃掉了作文.doc

    教师和家长应当鼓励孩子们表达自己的想法,无论这些想法多么离奇,因为它们是孩子们独立思考和创新思维的源泉。同时,通过引导孩子们观察和描述自然现象,可以培养他们对科学的兴趣,帮助他们理解世界运行的基本原理...

    装在套子里的人练习题及答案精选.doc

    - 对比与反差:将别里科夫与正常人的行为进行对比,突出他的离奇和不合时宜。 5. 作者从外貌、生活习惯、言行举止、思想观念等方面全面刻画了别里科夫的形象,展示了一个被各种“套子”束缚的典型人物。 6. 这句...

    《爱丽丝漫游奇境记》阅读练习及答案精练.doc

    在这个世界里,她经历了各种离奇的冒险,遇到了许多奇特的角色,如会笑的柴郡猫、神奇的三月兔和帽匠,以及爱砍人头的红心王后。 阅读练习中涉及的知识点包括: 1. **故事情节**:爱丽丝帮助小兔子寻找扇子和手套...

    jquery收集效果集合一些选项卡/菜单等很实用的特效

    JS代码 JS网页内容模块选用 Photoshop 扩展动作 TAB带动画 隔行同色 层固定在右下角的离奇方法 超简单表格隔行换色+鼠标经过变色 打开关闭层JS 弹出菜单 顶部自动收缩滑动门广告代码 动画效果打开层 关闭层 固定位置...

    皇帝的新装.ppt

    《皇帝的新装》是丹麦著名童话作家安徒生的一部经典作品,他是世界儿童文学的瑰宝,以其独特的想象力和深刻的人生哲理赢得了全世界读者的喜爱。这篇童话故事以《皇帝的新装》为载体,深入浅出地揭示了人性的弱点和...

Global site tag (gtag.js) - Google Analytics