小知识随手记(五)

1、函数内部属性

  函数内部,有两个特殊的对象:arguments 和 this。

  arguments 是一个类数组对象,包含着传入函数中的所有参数,主要用途是保存函数参数。但这个对象还有一个名叫 callee 的属性,该属性是一个指针指向拥有这个 arguments 对象的函数

  对于阶乘函数一般要用到递归算法,所以函数内部一定会调用自身;如果函数名不改变是没有问题的,但一旦改变函数名,内部的自身调用需要逐一修改。为了解决这个问题,我们可以使用 arguments.callee 来代替实现递归

function box(num) {
   if (num <= 1) {
       return 1;
   } else {
       return num * arguments.callee(num-1);//使用 callee 来执行自身
}
}

3、JS保留小数点后位数:

(1)toFixed():里面的参数就是保留小数的位数。返回结果为一个String类型

var num=22.127456;
alert( num.toFixed(2));//22.13,四舍五入

toFixed自带补位功能

var num = 55.3; 
console.log(num.toFixed(2));//55.30

(2)round()方法可把一个数字舍入为最接近的整数。无补位功能

var num=22.127456;
alert( Math.round(num*100)/100);

上面的方法有四舍五入的功能,但没有补位的功能,可以通过以下方式实现

var num1 = parseFloat(55); 
if (!isNaN(num1)) { 
    num1 = Math.round(num1*100)/100; 
    var str = num1.toString(); 
    var rs = str.indexOf('.'); 
    if (rs < 0) { 
    rs = str.length; 
    str += '.'; 
} 
while (str.length <= rs + 2) { 
    str += '0'; 
} 
console.log("将浮点数四舍五入,取小数点后2位,位数不够进行补位:");
console.log(str);
}

(3)substr直接按字符串截取:这种方式没有四舍五入的功能,直接按位截取的,也没有补位功能

var num1 = 55.3785 + ""; 
console.log("substr方式保留两位小数:");
console.log(num1.substr(0,num1.indexOf(".")+3));//55.37

 4、jQuery获取父窗口里的元素

$("#父窗口元素ID",window.parent.document);          对应javascript版本为window.parent.document.getElementById("父窗口元素ID");

$('body',window.parent.document).height();
//获取父窗口body高度

5、select根据某个值动态选中

(1)注意下面此种需要option里有加value属性才可以,当然不止value属性,随便加个属性,均可通过此种方式获取

<select id="select_id" >  
    <option value="0" >请选择</option>  
    <option value="1">苏宁易购</option>  
    <option value="2">天猫旗舰店</option>   
</select>  
$("#select_id option[value='1']").removeAttr("selected");//根据值去除选中状态    
$("#select_id option[value='"+ soft.id +"']").attr("selected","selected");//根据值让option选中

 6、获取一组radio被选中项的值

$('input[name="abc"]:checked')//选中
$('input:radio:checked').val()//选中
$('input[name="abc"]').filter(":checked").val()//选中
$('input[name="abc"]:eq(1)').val()//某个特定
$('input[name="abc"]').eq(1).val()//某个特定
$('input[name="abc"]').each(function(){//每一个
     alert(this.value);
})

7、(1)为什么我的vertical-align属性不起作用?vertical-align,称之为“inline-block依赖型元素",只有一个元素属于inline或是inline-block水平,其身上的vertical-align属性才会起作用。所谓inline-block水平的元素,就是既可以与inline水平元素混排,又能设置高宽属性的元素。哪些元素呢,例如图片,按钮,单复选框,单行/多行文本框等HTML控件,只有这些元素默认情况下会对vertical-align属性起作用。

(2)vertical-align的属性:

text-bottom是与父标签的文字底部对齐,而bottom是相对于父标签的底部对齐(一个是内容区底部,一个是标签区底部

8、jquery实现手机验证码发送倒计时60s

<!DOCTYPE html>
<html>
<head>
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript"> 
var countdown=60; 
function settime(obj) { 
    if (countdown == 0) { 
        obj.removeAttribute("disabled");    
        obj.value="免费获取验证码"; 
        countdown = 60; 
        return;
    } else { 
        obj.setAttribute("disabled", true); 
        obj.value="重新发送(" + countdown + ")"; 
        countdown--; 
    } 
    setTimeout(function() { 
        settime(obj) 
    },1000)
}
</script>
<body> 
<input type="button" id="btn" value="免费获取验证码" onclick="settime(this)" />
</body>
</html>

9、【回归基础】JavaScript 函数中默认参数:

  默认参数允许你设置参数的默认值。默认情况下,JavaScript 函数的所有参数都是 undefined (未定义的)。默认参数允许你设置不同的默认值。请考虑以下示例:

function logFirst(data){
  console.log(data[0]);
}

  这个例子是说,我们有一个简单的函数,打印数组中的第一个元素。该函数需要一个参数,data ,我们期望它是一个 Array 数组。但是如果没有数据传入,会发生什么?

    logFirst();
    // Uncaught TypeError: Cannot read property '0' of undefined  
    // 未捕获的输入错误:无法读取 undefined 的 '0' 属性

  我们收到一个错误。 因为 data 未被传递到我们的函数中,因此被默认为 undefined (未定义的)。

  我们如何解决这个问题? 你可以使用默认参数。 要使用默认参数,只需传递 (parameter = defaultValue) 。 这里我们将参数的默认值设置为 ['cats'] 数组。

function logFirst(data = ['cats']){
   console.log(data[0]);
}
logFirst();//cats

  现在当我们运行没有任何传入的函数时,data 的值将默认为数组 ['cats']:它返回默认值 cats最重要的是,如果我们提供一个参数,它将覆盖默认值

logFirst(['dogs']);
// dogs

  还可以在单个函数中拥有多个默认参数:

    function logFirst(num = 0, data = ['cats']){
      console.log(`I own ${num} ${data[0]}.`);
    }
    logFirst();
    // I own 0 cats.
    logFirst(2);
    // I own 2 cats.
    logFirst(undefined,['dogs']);
    // I own 0 dogs.

  PS:你如果不是用ES6语法,默认参数可以这样写:var num = num || 1 ;

    function logNum(num){
      var num = num || 1 ; // 当参数 num 为 false 时,重新赋值 num  
      console.log( "默认参数 num : " + num );
    }
    logNum();
    // 默认参数 num : 1

  这里第2行的意思是,当参数 numfalse 时,重新赋值 num1

10、checkbox不选中传值,checkbox设置默认值

  最近在使用form表单时,出现了一个问题,checkbox如果选中会传true,没选中就什么都不传,但是这不是想要的效果呀,希望做到选中时传true,不选中时传false。

  html checkbox元素只能设置一个value,当我们没有选中的时候取不到其默认值,也就不会传给后台。

  于是在checkbox元素上面增加一个隐藏域,当我们checkbox选中时就利用 js 去改变其默认值,不选则不改变。

<input type="hidden" id="history" name="isHistoryTime" value="false">
<input type="checkbox" onclick="javascript:document.getElementById('history').value=this.checked;"></p>

 

posted @ 2017-08-23 15:16  古兰精  阅读(633)  评论(0编辑  收藏  举报