JS的系统函数和自定义函数
今天突发奇想,加入一个js函数,在调用的时候,传递的形参和实参不匹配,该会如何呢?
function Test(a,b)
{
alert(a+b);
alert(a+"____"+b);
}
1、实参小于形参的时候
Test();返回的结果第一个是 NaN(不是数字)第二个是undefined_____undefined
Test(1);返回的结果第一个是 NaN(不是数字)第二个是1_____undefined
解决:形参a和b并不是真正被声明使用,所以是undefined,所以可通过 a?a:1这种方式来设置默认值
function Test(a,b)
{
a=a?a:1;
b=b?b:2;
alert(a+b);
alert(a+"-------"+b) ;
}
Test();返回的结果第一个是 3 第二个是1_____2
2、实参大于形参的时候
function Test(a,b)
{
a=a?a:1;
b=b?b:2;
alert(a+b);
alert(a+"-------"+b) ;
}
Test(1,2,3,4,5,6);返回的结果第一个是 3 第二个是1_____2
另外,js里有一个获得实参的数组,arguments
function Test(a,b)
{
var sum=0; 如果是 var sum; 结果是NaN
for(var i=0;i<arguments.length;i++)
{
sum+=arguments[i];
}
alert(sum);
}
Test(1,8); 结果 9
再说个题外话:
function Test()
{
alert(a);
}结果是直接报错了,而
function Test(a)
{
alert(a);
}并不会报错,反而是弹出 undefined,说明 如果变量声明了不赋值,则是undefined,不声明则直接报错。
以上是自己的推测并验证了的结果,至于为什么现在还真是说不清楚,下面就说点常用的系统函数吧——global对象的方法,这个Global对象很神奇,从不直接使用,不能new,它在JS引擎初始化的时候就自动创建了,而且它的方法和属性就可以立即使用。
escape(str);加密
unescape(str);解密
function Test()
{
var sum="大量时间的发送快乐的机房是";
document.write(escape(sum)); 之所以用document.write是因为加密的字符串在弹框里,根本复制不出来解密,所以只能卸载页面里了
alert(unescape("%u5927%u91CF%u65F6%u95F4%u7684%u53D1%u9001%u5FEB%u4E50%u7684%u673A%u623F%u662F"));
}
Test();
isNaN(n);如果不是数字返回 true 是数字返回 false
alert(isNaN("a12.4")); true
alert(isNaN("12.4")); false
alert(isNaN(12.4)); false 说明,isNaN(s)的时候自动执行了一次parseInt()这个功能
parseInt(s);将字符串转成数字,只要整数部分
var t="12.345";
alert(parseInt(t)); 12
var t="a12.345";
alert(parseInt(t)); NaN
var t="1a2a.345a";
alert(parseInt(t)); 1
带转换的字符串中只要第一位是非数字的话就返回NaN,直到第一次出现非数字的前面所有的数字作为要转换的字符串,如果期间有小数点则取整数部分。
parseFloat(s);同parseInt(s);
eval(str);可以将字符串解释成js脚本,执行程序
function Test()
{
var t="var s='abc';alert(s);";
eval(t);
}
Test(); 弹出 abc
浙公网安备 33010602011771号