javascript

1、 js中的运算,都是先把他们转换为二进制再运算的。浮点数(小数点)的运算往往会往往偏差,比如一个0.22乘以100会得出的数字可能是有十几位小数点的数字。(浮点数参与的所有运算都会出现偏差,需要处理)

  解决方案 : https://www.cnblogs.com/xinggood/p/6639022.html

2、 js调用ocx控件(少数浏览器支持ocx控件),在<object>标签(classid的查找:注册表中搜索控件名(不包含后缀名),HKEY_CLASSES_ROOT控件名.**CLSID下对应的数据就是claissid)中加载好,js中通过getElementById获取到这个控件对象,在js中就可以直接使用控件的方法和属性了。

3、js 不同页面间传递值并取值:     https://blog.csdn.net/web_xyk/article/details/47857033

4、html5 动态存储 localStorage.name 和localStorage.setItem()的差别

  参考  : https://blog.csdn.net/maoguiyou/article/details/44803761

  注意:1、localStorage只支持string类型的存储,存进去的数据类型可以 数字、字符串、布尔类型。取出来的数据类型只有字符串类型。 https://www.cnblogs.com/st-leslie/p/5617130.html

        2、json也是字符串类型的数据,但是json里面的数据是可以保持多种数据类型的。

5、js中 数值数字、字符串数字运算的总结:

  a、数字转换为字符串 : 全局方法String() 、Number 方法 toString()       参考:https://www.w3cschool.cn/javascript/js-type-conversion.html

  b、字符串转换成数字 : 全局方法 Number()、parseInt()  、parseFloat() ---parseFloat 方法转换后的数字,会把小数点后面的 0 自动去掉 。

  c、隐式转换  :  参考链接

”+“ :  运算符或连接符,由于”+“号既具有连接符的功能,也有运算符的功能。所以 如果想让其执行运算符的功能,则需要将字符串转化为数字类型
其他运算符如: * 、/ 、- 都可以实现字符串和数字的直接运算,当然应为数字类型的字符串。

  d、保留n位小数,toFixed()

6、JQ滚动条事件 及 各种高度  :  https://blog.csdn.net/jx950915/article/details/78047651

  滚动条滚动到特定位置后出发的事件  :  https://blog.csdn.net/lansetiankong12/article/details/55254212

7、HTML5中关于wheel事件兼容性处理 : https://my.oschina.net/ososchina/blog/349851  或  https://www.cnblogs.com/pigtail/p/3396505.html

   js中鼠标滚轮事件兼容性问题 :  https://www.cnblogs.com/walkingp/archive/2010/02/03/1662872.html

8、全屏滚动的原理及实现  :  https://blog.csdn.net/Rita_jing/article/details/78236768  (用到鼠标滚动事件)

9、js的console.log(),居然有异步执行程序的感觉(实际上是同步的,输出对象时,有延时的情况。输出简单类型的属性值就不会出现这种情况),这点惊呆了我。

var  a={name:"小Q"};
console.log(a);  
a.name="snail";

  这里输出的竟然是下面的值:

 原因解释参考: https://segmentfault.com/q/1010000014613305/  (推荐,看下)      或      https://www.cnblogs.com/mieQ/p/7607691.html

其实出现这种情况是因为我们点开下面这个箭头的时候它会重新获取这些引用的值,此时获取的数据,内存中当然是修改过了。

 10、js中对象是引用类型的,对象通过赋值。其中一个变量改变,另外一个也会改变。如果不想两个变量值相互影响。最好使用对象拷贝,让两个变量相互独立。

  在ajax请求中要特别注意,直接赋值带来的数据相互影响。

  因为ajxa请求回来的数据,属性值都是基础类型,所以拷贝这样的对象。最简单的方法是把json对象,变成json字符串再赋值(字符串不是引用类型),之后有转回对象。 

11、js的错误机制 

  js程序在浏览器中,一旦报错,后面的程序就不会执行了。  这样的代码是有问题的,js程序要控制不能报错。 

  因为有的时候是后端的返回的数据类型改变了,之前那个数据类型的方法无法用就会报错,下面的程序就无法运行了(这种还是属于后端做了修改的,前后端沟通好就可以了,前端一般不用判断它的数据类型,要么是返回的是null,要么是正常)。

  有时候是后端的数据变化是正常的(比如查询公交路线202路实时的公交情况,运营时间查询,肯定是有数据的,返回的数组中有对象,可以使用对象的方法去访问。

  如果是在非运营时间,返回的数据是一个空数组,但是程序里使用了数组下对象的方法,程序肯定报错,后面的程序就无法运行了 ),所以返回的数据,使用到 data.name 中格式访问数据的话,就一定要判断data字段是否是null或是undefined(不存在)。

  Javascript异常处理机制详解 : https://blog.csdn.net/u012468376/article/details/57411822?utm_source=itdadao&utm_medium=referral

  try catch对代码运行的性能有影响 : https://www.jb51.net/article/101291.htm

  个人体会:个人觉得ajax请求回来的数据,都应该做好 异常处理 或 数据是否存在的判断。因为后端返回什么样的数据,前端是不可控的。至于是用  if 判断  来处理还是使用 try catch来处理。看具体的业务。

12、ajax获取的数据(或url上获取的参数) 引起程序报错 的 总结 :下面的情况一定要做异常处理(这个属于前端问题)。

  重点:后端返回的不需要马上就做判断的,在使用到这个数据的对象或方法【js原生数据类型的方法,如字符串的方法】时再做判断。获取一个值是不会报错的

  说明:这里只考虑有没有这个对象,或字段名的问题。不考虑值多少或值的数据类型的问题。因为值多少不会引起程序报错,只会根据某个字段值走向不同的流程。值 的 数据类型引起的错误,是后端程序没有按照接口文档的数据类型开发)

  a、数组中包含对象,但是有的参数对应的数据中,没有相应的数据,这个数组就会的值就是一个空数组。(如 查询非运营时间的公交线路的车辆,没有一辆车是运营的)

  b、某个字段的字段名(属性名)没有了,有时程序会因为某个字段没有值(undefined),在序列化(前后端都可以序列化的)的过程中把这个字段给去调了。导致使用这个字段对应数据类型的方法报错。

    注意: JSON.stringify(obj )方法,如果obj对象中某个属性的值为undefined,那么相应的属性会被忽略。序列号后的json字符串中就没有这个属性了

  总结: ajax请求,返回的数据,前端要一层一层判断是不是 null或undefined(返回的数据中没有这个字段)。这两种数据,js中获取这个数据的属性或方法就会报错。

     解决方法  var catId1=data[i].catId1&&data[i].catId1.name; 如果要使用name的方法,还要判断name是不是null值。

//可以通过逻辑运算符来判断catId1的值
var catId1=data[i].catId1&&data[i].catId1.name;    
//当catId1的值为null时,让null转换成空                
function isNull(catId1){
    return catId1 === null;
 }
if(isNull(catId1)==true){
    catId1="";
}

13、js的变量名可以是中文名字:https://blog.csdn.net/discoveryunknown/article/details/53556718 

  汉字作为变量名,所有的浏览器都是支持的。但是中文字符(符号)会有兼容性问题,最好不要使用:https://bbs.csdn.net/topics/350047936 

  体会:汉字作为js变量名,虽然不建议使用(从编程的国际化考虑)。但是在有些情况使用是非常方便的,比如,遍历有中文的数组,

  而且是以汉字的值进行条件判断的时候优势就非常明显。参考代码:https://www.echartsjs.com/gallery/editor.html?c=scatter-map

  感悟:冲echarts官网中发现,这么使用。亲测过是有效的。

14、CSS、JS中的相对路径引用 :https://www.jianshu.com/p/963be59c0ef3

  在css中出现的相对路径,是以css文件所在路径为基准的,而js中的路径则是以导入此js的网页文件所在的位置为基准的。(服务器不去特殊配置,这个是对的。如果服务器把其它路径的页面,给当前请求的地址时,相对路径是以浏览器上的地址为基准的)

15、js中的循环语句:  https://www.cnblogs.com/wuxiaoshang/p/5843885.html  (1. for;2. while;3. do……while。工作中基本不会用到do……while,这里不说明)

  重点:1、for 循环,跳出循环语句:    break语句continue语句,前者终止整个循环,后者阻止某次循环的执行

     2、while 循环:不确定循环次数时使用。这个循环可以无限次循环下去,直到条件为 false 时结束(或者执行到break语句)。如果条件达不到就会变成一直循环下去,把页面搞崩溃。

16、js引擎的执行过程:https://www.cnblogs.com/duiniweixiao/p/8919673.html 

  在JS引擎执行过程中,进入执行阶段后,代码的执行顺序如下:

宏任务(同步任务) --> 微任务(Promise) --> 宏任务(异步任务)

17、js的逗号表达式:https://www.cnblogs.com/hellolong/p/4210297.html 或 https://www.jianshu.com/p/f89f8b2762f3(推荐)

  最后整个逗号表达式的值是最后一个表达式的值。(逗号运算符是所有运算符里优先级最低的一个)

var num = (5, 1, 3, 8, 0); // num 的值为 0

18、测试js  运算能力  可以使用  斐波那契 函数:https://segmentfault.com/q/1010000008373129

原文地址:https://www.cnblogs.com/wfblog/p/8631334.html