工作中用到的js/jquery知识点总结

函数声明和函数表达式

函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符.

因而如果不声明函数名称,它肯定是表达式; 如果声明了函数名称时, ECMAScript是通过上下文来区分的,如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。

  function foo(){} // 声明,因为它是程序的一部分
  
  var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分

  new function bar(){}; // 表达式,因为它是new表达式

  (function(){
    function bar(){} // 声明,因为它是函数体的一部分
  })();

还有一种函数表达式不太常见,就是被括号括住的(function foo(){}),他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含表达式.

  function foo(){} // 函数声明
  (function foo(){}); // 函数表达式:包含在分组操作符内
  
  try {
    (var x = 5); // 分组操作符,只能包含表达式而不能包含语句:这里的var就是语句
  } catch(err) {
    // SyntaxError
  }

除了(), 还可以通过在函数声明外面添加~, !, -, +等运算符将函数声明转化成函数表达式. 下面这些都不会报错, 并且立即执行弹出提示框alert.

(function () {alert(1)})();
(function () {alert(1)}());
!function () {alert(1)}();
-function () {alert(1)}();
~function () {alert(1)}();
+function () {alert(1)}();

获取有class="hide"的元素高,宽是值为0

$("#manually-topo-preview").width(); // 0, 因为有class=hide属性

复制js对象

js中复制分为深度复制和浅度复制, 深度复制出来的对象和原来对象没有任何关系, 对复制对象的操作不会影响原对象; 浅度复制出来的对象实际上和原来的对象是一个东西, 对复制对象的操作同样会在原有对象上体现.

  • 浅度复制 var copy = $.extend({}, origin)
  • 深度复制 var dcopy = $.extend(true, {}, origin)

日期时间操作

// 获取当前时间
now = new Date()

// 获取当前时间的年,月(范围0-11),日
now.getYear(); now.getMonth() + 1; now.getDate();

// 获取之前n的时间
previous = new Date()
previous.setDate(now.getDate() - n)

正则表达式

// 正则表达式是放在//中
/bc/,匹配bc

异常处理机制

result = 0;
try{
    $.ajax({
        url: '/home/data/',
        type: 'GET',
        dataType: 'json',
        success: function(data){
            result = data.result;
        },
    })
}catch(exception e){
    alert('failed to get data from backend');
}finally{
    alert(result);
}

转载于:https://my.oschina.net/alazyer/blog/737937

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值