标签‘js’

基于Array的JavaScript表达式执行函数实现

最近项目涉及到表达式,简单封装了一些功能,如表达式解析、执行等,解析不用说,网上很多表达式字符串解析为词法树的库,我们也不必再造轮子(我用jsep进行解析),这里说下执行表达式的方式。

默认字符串解析抽象词法树按理说是可以直接解析执行的,只不过通常此类词法树要表达的内容过于多,数据的存储也过于庞大,于是我们结合自己业务对关键数据做了抽象,比如

查看更多...

为什么建议不要使用「h5」这个简称?

最近发现好多人喜欢将 HTML5 说成 h5,甚至是代指移动端的 Web 页面或者 Web App。虽然说起来朗朗上口,但是小编真的不建议这样来使用。

小编很早之前做过一个关于「h5 这个说法是否喜欢」的调查,总共有 552 位粉丝参与,最终结果是:有 16.7% 的人认为「很好」,37.5% 的认为「无所谓」,有 45.8% 的人认为「不喜欢」(投票数据的原始查看地址: http://vote.weibo.com/poll/2905710 )。那究竟为什么会有那么多人不喜欢「h5」这个简称呢?

「h5」这个简称非常不专业,容易造成误导。

与 JavaScript 被简称为「JS」不同,据小编了解到的情况,h5 这个说法目前只在中国大陆地区的程序员中使用,台湾、印度和美国等地区并没有这个简称,会造成国内外技术说法不一致。而更重要的一点是,JS 是一个指代清晰的简称,没有歧义,就指 JavaScript 这种程序语言。但 h5 却不是,至少 HTML 中还有个 h5 标签。 查看更多...

我为什么选择Nunjucks作为NodeJS模板引擎

最近换了工作,在新的工作中,需要实现后端渲染,故而一改最初的纯html+js形式,选择页面框架、TDK及部分页面后端渲染,由于后台采用java开发,一开始曾考虑另起一个tomcat服务,用于渲染前端页面,而实际搭建完框架后发现,一年多不碰java(期间虽然用过Groovy、kotlin,但实际开发起来还是不如js来得畅快),已经对java的繁琐有些不耐烦,最后转而选择采用NodeJS做后端渲染,一来部分前端模板可以复用(后面发现复用其实是个很纠结的想法),二来做前端开发的兄弟也可以快速上手,相比他们并不懂的java来说,毕竟NodeJS更容易学习接受。

确定了适用NodeJS,下面就确定一下大概框架,采用了目前常见的组合——express+template,因为最初前端使用了所谓最快的模板引擎artTemplate,这里tempate想进行复用,就采用了服务器版artTemplate,实际测试发现并不符合我的需求,由于最近一年使用PHP的YII框架,其中模板layout可以使用block,很方便重写样式、脚本等部分,这里实测后发现,后端模板如果没有layout,基本和写纯静态无异了。 查看更多...

关于HTML5不得不说的一些事

近两年来,IT界炒的最火热的发展方向无非是O2O,而炒的火热的技术也无非是HTML5,但实际上,HTML5究竟是什么?能做什么呢?知其然,更要知其所以然,这是中国人对知识真理的追求写照。然而在关于HTML5的问题上,这句话并没有显现出来。HTML5会改变下一代互联网,HTML5潜力无限,这些观点在互联网上多之甚多。为什么呢?HTML5在互联网上究竟带来了什么?这些问题一抛出,全行就愕然了。甚至HTML5究竟是什么,都很难让人阐述清楚。

首先,简单而言HTML5就是超文本标记语言规范的5.0版本,当然对于不同的人来说,HTML5具有不同的意义。对某些人来说,它仅仅意味着"页眉"和"页脚"之类的新标签,以及一系列出现于标记的新属性。对其他人而言,这意味着出现在网络上的新鲜有趣事物,其中包括植入单个浏览器或其他非HTML5规格的技术。 查看更多...

关于JS加密解密那点事

最近和ucd部分的前端开发有合作,可曾想他们发过来组件什么的都是加密处理过的,事实上组件又不完善,很多小的bug都要给他们定位,很是头疼,果断解密看看。

很多朋友以为JS的加密是不可逆的,其实常见的eval加密也谈不上是加密,只能算是一种编码(Encode)或者也可以成为是一种打包(packer),类似于base64这样的编码,都是可以以一定方式还原的,当然也就是“解密”了。

仔细观察加密JS,你会发现,大部分文件里面都有function(p,a,c,k,e,r)或者是function(p,a,c,k,e,d),据说这样的pack方式是dean edwards提出的,你可以访问其个人主页以获取这方面的最新信息。后来还有一些编码打包方式也是eval开头,但是特征字符串p,a,c,k,e,r(d)改变了,我们姑且称为是这种打包方式的一个变种吧,其实解码很简单,我们回顾一下JavaScript脚本中eval含义及用法。 查看更多...

Extjs 4.2 Grid增删改及后台交互(Java)

上次发了Easyui Datagrid的增删改查的使用学习记录后一直想整理下基于Extjs4.2的Grid学习使用记录。苦于抽不出时间,一直拖到现在。不得不说,Extjs确实很强大,新版的Neptune风格也很入我眼,但毕竟没怎么用过,第一次用,也不敢上来就搞什么自定义组件,也就纯粹的model+store+panel声明式创建表格了。

抛开分页,抛开排序,今天只简单讲一下最近使用中总结出来的rest形式增删改查数据的方式。发现这种方式挺不错的,故而分享下。
代码Example如下:
定义Model

Ext.define('Person', {
    extend: 'Ext.data.Model',
    fields: [{name: 'id',
        type: 'int',
        useNull: true
    }, 'email', 'first', 'last'],
    validations: [{ type: 'length',
        field: 'email',
        min: 1
    }, {type: 'length',
        field: 'first',
        min: 1
    }, {type: 'length',
        field: 'last',
        min: 1
    }]
});

查看更多...

用Dojo实现XHR、跨域、及其他Ajax请求

工作之余,收集了dojo的入门知识,以便以后查用。下面是用Dojo实现XHR、跨域、及其他Ajax请求的介绍,希望有用。

在任何浏览器上方便地实现Ajax请求是每一个Ajax框架的初衷。Dojo在这方面无疑提供了非常丰富的支持。除了XMLHttpRequest之外,动态script、iframe、RPC也应有尽有,并且接口统一,使用方便,大多数情况下都只需要一句话就能达到目的,从而免除重复造轮子的麻烦。而且,Dojo一贯追求的概念完整性也在这里有所体现,换句话说,在使用Dojo的Ajax工具的过程中不会感到任何的不自然,相反更容易有触类旁通的感觉,因为API的模式是统一的,而且这里涉及到的某些概念(如Deferred对象)也贯穿在整个Dojo之中。

Dojo的XHR函数

Dojo的XMLHttpRequest函数就叫dojo.xhr,除了把自己取名美元符号之外,这好像是最直接的办法了。它定义在Dojo基本库里,所以不需要额外的require就能使用。它可以实现任何同域内的http请求。不过更常用的是dojo.xhrGet和dojo.xhrPost,它们只不过是对dojo.xhr函数的简单封装;当然根据REST风格,还有dojo.xhrPut和dojo.xhrDelete。 查看更多...

JSON基础知识与Javascript解析方式分析

JSON即JavaScript Object Notation,是一种轻量级的数据交换格式,易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

1、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 查看更多...

jsp页面中使用iframe几个问题总结

最近做项目,jsp的,我做前台的输出,因为不常用jsp做界面美化,更不常用iframe控制页面。这回可算遇到不少问题了,首先,在iframe内部使用link获取css和jsp整个文档中获取获取js脚本都有问题,其次就是,遇到了ff的onclick未定义情况。这里不再赘述,相信大家都遇到过了吧,可恶的网络,卡的要命。刚刚写了近一千字的内容,居然没有保存,发布后只有两个字,杯具啊!平时几分钟保存一次草稿,这次居然没有自动保存,果断不写了。直接给出我网上搜集的解决方法。

首先就是link问题,这里我还没有找到问题根源,直接jsp include动态写页内了。

然后就是ff的onclick事件。找了以下解决方案。
firefox没有这个事件,需要自己处理一下,代码如下:

function doClick(obj) {
if (document.all) {//如果支持的话,是ie下,默认有这个事件,
obj.click();
} else { //否则就自己添加一个
var evt = document.createEvent("MouseEvents");
evt.initEvent("click", true, true);
obj.dispatchEvent(evt); 查看更多...

IE提示“无法打开Internet站点…”分析解决

整理这篇文章是因为今年春节在外地没回去,所以这么晚还在网吧上网,看到网吧经典的ie6打开百度都报错,感觉很是不爽,还好我自己习惯了用chrome内核的浏览器,但其他人就不行了,刚刚听到有人问网管怎么解决打不开百度的问题,我仔细分析了下,貌似是百度的龙年新logo对于ie6不兼容所致,故这里整理发表此文,另外,想体验下百度龙年动态logo,还是用高版本的ie或者其他内核浏览器吧!

通过网上资料得知,如果js改变dom element,而该element尚未加载完毕,就会造成ie下无法打开站点的错误警告。 查看更多...