从项目中总结的js知识点

1. 数字字符串和数字进行比较可以得出正确结果,却不能正确判断是否在一个数字数组中。如以下程序:

var s = ‘8‘, n = 8, arr = [1,2,8,9];
console.log(s==n ? ‘yes‘ : ‘no‘);
console.log($.inArray(s, arr)!=-1 ? ‘yes‘ : ‘no‘);
console.log(arr.indexOf(s)!=-1 ? ‘yes‘ : ‘no‘);

打印出来结果分别是:yes、no、no。

在JavaScript中经常会遇到数字字符串,为了防止这种情况的出现,若是用于数字数组判断,应该使用parseInt()函数将其转化为int类型。

2. 使用$.each()函数来遍历数组的时候,默认下标从0开始连续访问至数组的最大下标,中间不存在的下标值为”undefined”,且字符串下标元素不会被访问到。如以下程序:

var arr = [];
arr[1] = 1;
arr[4] = 4;
arr[‘aa‘] = ‘aa‘;
console.log(arr);
$.each(arr, function(i, o) {
        console.log(i, o);
});

打印结果为(数组长度也不正确):

3. 在使用了异步请求的程序中,访问某个数据对象出现”undefined”,一般是异步请求还没完成,应该在确保异步请求已完成的地方访问请求得到的数据。

4. 给html元素绑定的click事件是异步的,点击之后才会触发。如果使用循环给多个元素绑定click事件,而click事件的方法中使用的参数值又随着循环体的迭代而改变,那么无论点击哪个元素,触发的都将是最后一个元素的click事件。这种情况下,可以在需要绑定click事件的元素中自定义一些属性,把参数的值写死在里面,然后在click事件的方法中读取当前元素的自定义属性值作为参数值,这样就可以避免以上问题的出现了。

5. 尽可能减少操作dom的次数。若需要使用字符串拼接生成html元素,可以把所有需要生成的元素都拼接到字符串中,然后一次性写入dom。

6. 能在循环外做的动作就不要放在循环内部了,事件注册一般都不需要在循环内部。

7. 滚动条滚动不需要计算页面内容和滚动条之间滚动距离的比例,直接使用页面内容的滚动距离即可。

8. 一般不要在页面元素定义太多的id,容易冲突,可以使用元素之间的遍历关系来定位需要操作的元素。

9. 使用indexOf()函数来判断一个数组是否包含某个元素其实也是一个循环判断。

时间: 2024-10-12 10:24:36

从项目中总结的js知识点的相关文章

在vue项目中使用canvas-nest.js,报parameter 1 is not of type 'Element'

canvas-nest.js是一款轻量的网页特效,如图: github地址:https://github.com/hustcc/canvas-nest.js 在普通的html项目中,只要将<script src="dist/canvas-nest.js"></script>插入到body标签最下边即可. 在vue项目中,使用时配置 1 import CanvasNest from 'canvas-nest.js'; 2 3 const config = { //

项目中多余的js写法之join和||连用

先看一段代码,框里面和框外面代码有区别吗? 也就是说直接给bookHtmlStr和checkHtmlStr赋值和经过一些无意义计算再赋值有什么区别,或者说有什么优劣吗? 首先我们看以上代码执行的结果截图,再分析原因. 也就是说,以上代码执行的最终结果为: var bookHtmlStr = "<tr><td colspan='10'>暂无数据!</td></tr>"; var checkHtmlStr = "<tr>

百度地图在项目中的使用(JS)

废话先: 这个项目是使用ASP.NET MVC 写的,而关于百度地图在项目中的应用不限于ASP.NET MVC 因为我大部分的API的使用是通过Javascript,想在项目中使用百度地图,你得先成为百度的开发者,具体的步骤,在本篇博文中不多叙述. 主题: 在使用百度地图的时候,你得先要获得一个ak 这里就是点击创建应用,它提供了几个类别1.for server  2.for mobile 3.for browser,在这里呢,因为我们是通过一个for browser来了解百度地图,所以在创建应

Eclipse项目中加入jquery.js文件报错(missing semicolon)问题

在使用Eclipse3.7及以后的版本的时候,加入jQuery文件会报错(missing semicolon),文件中会显示红色小X,虽然这个错误并不会影响项目的运行,但是这个却会大大的影响到开发人员的心情,看这总是很不爽,怎么样才能解决呢. 很简单,首先我们先分析下造成这种情况的原因,如果你是个心细的人,去研究一下项目中的.project文件,你会发现有这样一段代码,如下:   节点下的这些代码,你会发现第一个有个org.eclipse.wst.jsdt.core.javascriptVali

在Maven+Spring项目中使用Node.js的Gulp进行前端自动化构建

刚开始打算进行前后端分离开发,后来发现在使用JSP或者Freemarker做动态页面时,想发挥这些自动化构建工具牛逼闪闪的livereload功能并不是那么的轻易,因为我们必须还得调教它们去调用Java容器.现在全球社区似乎还没有成熟的插件可以自动帮我们调教Java容器,百度Fis的Jello也只是做了一下velocity的自动化,自己写感觉就是自虐,所以在这个问题上倒不如把Gulp当成一个Maven来使用,反正J2EE开发人员应该大都习惯了修改代码之后漫长无尽的build.相反,如果对Gulp

项目中Android与Js交互

一.项目涉及的类: DetailCourseMainActivity,HtmlCountMainFragment,HtmlCountFragment,HtmlCountJSInterface,AnswerWebView 二.逐步分析: 1.MainActivity: 1)点击:打开页面 showFragment(HtmlCountMainFragment.class); 2)针对返回键的处理: onBackPressed(): 一般的:super.onBackPressed();return;对

vue项目中使用md5.js及base64.js

一.在项目根目录下安装 npm install --save js-base64 npm install --save js-md5 二.在项目文件中引入 import md5 from 'js-md5'; let Base64 = require('js-base64').Base64; 三.在项目文件中使用 base64 Base64.encode('dankogai'); // ZGFua29nYWk= Base64.encode('小飼弾'); // 5bCP6aO85by+ Base6

在web项目中集成pdf.js的默认查看器

pdf.jsMozilla开源的一项用于在HTML5平台上显示pdf文档的技术,Mozilla自己的Firefox浏览器也用了pdf.js来预览pdf,可见应该是一个比较成熟稳定的方案(btw,chrome用的是foxit的技术,国人骄傲啊).当然类似的方案有很多,并且大多都提供了丰富的api,如果你仔细读文档/api,可能会有好的收获,但是Mozilla同时把在Firefox内的查看器也一道开源了,对于大部分定制性不强,只需要浏览的使用场景来说,似乎可以直接"拿来主义",本文就说的是

项目中常用的JS操作技巧

1.<a>标签-超链接中confirm方法使用介绍 <a href="a.html" onclick="if(confirm('确定删除?')==false)return false;">删除</a> 2.<select>下拉框三级联动效果 1).html代码 <select name="select_element" id="firstServiceType">&l