js总结体会

1、表单元素提交之后(不刷新)数据还是会存在的,想要提交之后清除数据可以在ajax提交数据后,用reset()方法清除数据。

2、js中怎么判断哪个单选控件被选中了呢,即表单控件被选中哪些属性发生了变化。

表单提交到后台的时候,选中的input就会把自己的value属性中的值传到后台去。至于前端js怎么判断还需要研究下。value 属性对于不同 input 类型,用法也不同(具体看菜鸟网)

3、如果新版的jQuery    toggle()方法废弃的话,自己需要封装一个。

4、js的事件最好是用绑定事件(jq中用bind()来绑定事件)来添加事件,如果碰到要求点击某一个按钮,那个元素的事件需要锁定(点不动),这个时候就需要解除事件。而可以解除事件的,只有用绑定事件bind绑定的事件才可以解除绑定。

5、jQuery  2.0以后的版本都不支持ie6、7、8了。最好用jQuery 1.9、1.8版本的。

6、window.location.href="../xx.html",这个相对地址是相对于html的。(这一个和其他的不一样,要注意了)

7JavaScript对象、JSON对象、JSON字符串的区别 : https://www.cnblogs.com/cstao110/p/3762056.html

  json对象(json对象的属性名任何时候都必须加上双引号,json对象也是 js对象的一种)和

  js对象(js对象的属性名是字符串,在表达式上可以加双引号,也可以不加。所以JSON格式的JavaScript对象和json对象很像,也开始说就是彼此吧。因为这种对象都可以转化为json字符串,前提是属性值都是基础类型的数据

  注意区别,还有json字符串(整个就是字符串,前后需要加上单引号)

  json数据格式有三种:简单、json对象、json数组

  json对象和json字符串相互转化https://www.cnblogs.com/longailong/p/7344567.html (如果对象的属性值不是基础类型 或者 是undefined ,比如函数。则 JSON.stringify() 转化为json字符串的时候会自动过滤掉这个字段的

                 或 https://www.cnblogs.com/ChrisMurphy/p/4925696.html

var obj = {
    "age":18,
    "name":function(){
        alert("df")
    }
}  
var tt = JSON.stringify(obj);
console.log(tt); // '{"age":18}'   

var dd = JSON.parse(tt)
console.log(dd); // {age: 18}

注:json对象,经过序列号和反序列化后。恢复到对象形式时,对应属性值的数据类型不会改变。把处理后的对象,赋值给一个变量,相当于做了升拷贝对象的功能(当然,属性必须是基础类型的,如果是函数就不行)。

 

8、js一旦出现报错,则下面的代码就不会再执行了。所以js文件最好不要全部写在一个外联的文件里,不然这个js一旦报错,所有引用了这个文件的网页,都会在执行到这个报错位置的时候,不在执行下面的程序。

解决的办法:1、尽可能的不要吧,所有的方法放在一个js文件里。

    2、把功能和方法尽可能的放开,即模块化。

    3、在已经读写好了的话,把出现错误的js代码放到最后面执行,则不影响前面正确的js代码的执                           行。                   复用的js代码,只能把题目封装在一个文件里,或者分功能的生成不同的js文件。

    4、可以把方法、功能封装在同一个文件上,留下不同的接口,但都不会执行,在自己的页面中调用需要的方法或功能。

9、为了防止一份js文件里的程序都被引用的html文件执行,从而出现程序上的错误,js文件的程序最好给不同的html程序设不同的入口函数。这样不需要的js代码就不会被引用了,从而避免了js。

10、自执行函数就是闭包函数,闭包函数内部声明的变量,在函数外面取不到。利用闭包的特点,在闭包函数内部再有一个返回函数,则可以做到一个函数内的变量声明只执行一次,但是回调函数可以执行多次。

如:var add = (function () {

    var counter = 0;

    return function () {return counter += 1;}

})();

dad()函数可以执行很多次,但是 var counter = 0;只是执行一次。

11懒加载是一种性能优化的处理方式:并不是特效技术,不过也可以做出特效效果来(这种特效效果一旦加载出来之后就没有特效了)。原理:就是当元素(如图片)距离视口多少距离的时候将data里面的图片路径,放到src属性里面  加载元素(图片)。懒加载主要还是用在图片上,因为图片数据比较大。至于视频和音乐应该也可以吧。有三种实现方法,延时器方法,事件触发加载,可视区加载

12、关联数组是对象,是属于数组这个对象的属性,打印数组的长度时是不包括关联数组的,级关联数组是数组对象的属性但不是数组的元素。

13、所有写在js文件里的功能,都封装在一个函数里,这样网页引入js文件,但不执行js程序。只有在网页中script标签中调用的js函数才会执行函数。

14、js中获取的url都是经过url编码的(比如空格就会编码成 20%),所以js中获得url上的参数信息需要先进行解码,回复正常的url格式,在进行截取。

15、 javascript中      var     that=this

在JavaScript中,this代表的是当前对象。

?
1
2
3
4
5
6
7
8
$(‘ #conten').click(function(){
//this是被点击的#conten
var that = this ;
$(‘.conten').each( function (){
//this是.conten循环中当前的对象
//that仍然是刚才被点击的#conten
});
});

  可以看到,this对象在程序中随时会改变,而var that=this之后,that没改变之前仍然是指向当时的this,这样就不会出现找不到原来的对象。

16、在js中 {} 除了表示对象直接量外,还表示语句块。如果一个语句以“{”开头时,js引擎将{}解析为语句块

      参考  : https://www.cnblogs.com/binarytree-fe/p/4950798.html  或  https://www.cnblogs.com/52cik/p/js-label-block.html

  eg:下面语句在js中可以正常执行。

   {   alert("hello");  }

 17、js中  标签语句  的作用 : https://www.jb51.net/article/38745.htm

    使用标签语句的作用就在于多重循环的时候可以一步完全跳出来,或跳到指定的一层循环中。

document.write("Entering the loop!<br /> ");
outerloop:   // This is the label name
for (var i = 0; i < 3; i++)
{
   document.write("Outerloop: " + i + "<br />");
   for (var j = 0; j < 5; j++)
   {
      if (j == 3){
         continue outerloop;
      }
      document.write("Innerloop: " + j + "<br />");
   }
}
document.write("Exiting the loop!<br /> ");
View Code
document.write("Entering the loop!<br /> ");
outerloop:   // This is the label name
for (var i = 0; i < 3; i++)
{
   document.write("Outerloop: " + i + "<br />");
   for (var j = 0; j < 5; j++)
   {
      if (j == 3){
         break outerloop;
      }
      document.write("Innerloop: " + j + "<br />");
   }
}
document.write("Exiting the loop!<br /> ");
View Code

18、javascript中 声明 和 定义 是不同的 : https://zhidao.baidu.com/question/1674116758239305707.html  或  https://blog.csdn.net/JimmySmith/article/details/56291818

  js 是弱类型语言,变量声明了,没有赋值,就不会分配内存空间(即未定义)。这个时候变量的值的undefined的。即 变量声明的时候,系统会默认给变量一个undefined值

    var a;  // 这里 程序默认给 a变量一个 undefined 值;
    console.log(a); // undefined
    console.log(typeof a); // undefined

19、javascript中的未声明未赋值 和 已声明未赋值 : https://www.cnblogs.com/zhuhuoxingguang/p/7850743.html  (直接赋值的变量会自动隐式地创建一个全局变量,所以是没有问题的,这里的使用变量是指使用b变量的值)

  注:未声明未赋值的变量 js程序员是不会主动去用的,一般也不会出现这种问题;后台请求的数据中根据入参的不同,某个字段可能是会没有的(如果这个字段的值是undefined,在JSON序列化的时候会把这个字段忽略),

    因为返回的数据都挂在返回值res这个对象下的,所以某个字段名(属性名)没有的话,也就是  属于 已声明未赋值  的问题

    如果某个字段名(属性名)没有,在js中使用他就会报错(这种就是未声明未赋值,但是js中使用了这个变量)。

    var a;
    console.log(a); // undefined              个人经验:undefined 是 值为 undefined ; 而 b is not defined 是说这个变量 没有声明,使用没有声明的变量是 会报错的
    console.log(typeof a); // undefined
    
    console.log(b); // 报错, b is not defined  
    console.log(typeof b); // undefined

    使用非 undefined数据类型的方法,是会报错的。处理后台返回的接口会经常碰到这个问题(入参不同,返回的数据会出现某个字段没有),所以需要做一个判断。

20、javascript 变量的重复声明 : https://blog.csdn.net/m0_37977481/article/details/81571150

  js变量 重复声明,程序会忽略重复的声明;声明中有赋值,赋值是有效的。

var a = 2;
console.log(a);  //2
var a;           // 浏览器忽略这条声明,声明和赋值一起的话。赋值是有效的。 
console.log(a);  //2

21、前端也要做好 错误处理   参考

一般前端的错误分为:

  • 脚本运行错误: js 脚本错误

  • 接口错误:服务器报错、数据返回不对、没有响应数据、超时等

22、eval()的替代写法 : https://blog.csdn.net/xundh/article/details/48153121

23、js通过 Blob对象 可以实现,js创建文件内容,并下载该文件的功能。 https://blog.csdn.net/qq_35652217/article/details/79913912

24、JavaScript对象之属性访问错误篇 :https://blog.csdn.net/weixin_43927609/article/details/85092455 

  js中  试图查询一个不存在的对象的属性就会报错。可以一级一级查询,这样前面的对象不存在(即false),就不会处理后面的判断了。 https://zhidao.baidu.com/question/872779220101251452.html 或 https://segmentfault.com/q/1010000004265186(推荐)

 if(window.yluareplace && window.yluareplace.systemId === "hzbs"){ // 先判断yluareplace 对象是否存在,yluareplace存在再判断它的属性是否存在,这样一级一级判断,程序就不会报错 

 }

       注意:程序 报错就不能正常 的执行了,这个时候需要使用 try...catch 进行处理。所以程序中最好避免报错的出现。

25、JS常见的报错类型:https://www.cnblogs.com/surui/p/9005184.html

  a、读取一个未定义的对象的属性或调用其方法时。Uncaught TypeError: Cannot read property '' of undefined (这是谷歌的提示,其它浏览器可能会有差异)

    b、调用未定义的函数时。               TypeError: ... is not a function

    c 、尝试访问一个未定义的变量时,它总是返回 undefined。    Uncaught TypeError: Cannot set property ... of undefine

    d、缺少括号或分号时。Unexpected token   (该错误提示的行号有时并不能指向正确的位置)

 26、为什么 window.location.search 为空 :https://www.cnblogs.com/codebook/p/5918079.html

   查询字符串search只能在取到  “?” 后面 和 “#” 之前  的内容,如果“#”之前没有“?”search取值为空。

 

 

转载于:https://www.cnblogs.com/wfblog/p/8748021.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值