`

javascript中一些数据类型以及奇怪的特性

阅读更多
javascript中一些数据类型以及奇怪的特性。具体情况直接运行就知道了!


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Data Types And Definitions</title>
<style type="text/css"></style>
<script type="text/javascript">
/* 

*/
function factorial(x) {
    if (x < 0) throw new Error("factorial: x must be >= 0");
    if (x <= 1) {
		return 1;
	} else {
		return x * factorial(x-1);
	}
}
//factorial(-2);
var fa = factorial(2);
console.log(" fa = " + fa );
var factorial = function(x) {
    if (x < 2) {
		return 1;	
	} else {
		return x * arguments.callee(x-1);
	} 
}
var y = factorial(5);  // Returns 120

console.log(" y = " + y );



function myFunc(arg1,arg2){
	console.log(" myFunc.length = " + myFunc.length);
	console.log(" arguments.length = " + arguments.length);
	console.log(" arguments.callee.length = " + arguments.callee.length);
}  
myFunc();
console.log(" myFunc.length = " + myFunc.length);//显示函数形参的个数 结果为2  


var isArray = function(obj) {
        return Object.prototype.toString.apply(obj) === '[object Array]';
}
function myfunc2(){
    var s="";
	//arguments.callee指的就是函数自己 注意 callee是 arguments的属性,不是函数的的  
	console.log(" isArray(arguments) = " + isArray(arguments) ); // false
	console.log(" apply(arguments) = " + Object.prototype.toString.apply(arguments) ); // [object Arguments]
	console.log(" typeof arguments = " + arguments); // [object Arguments]
	console.log(" arguments.callee = " + arguments.callee);
	console.log(" typeof arguments.callee = " + typeof arguments.callee);//function
    var len=arguments.length;  
    for (var i=0;i<len;i++){  
        s+=arguments[i];//此处要注意 arguments并非真正的数组,如果需要变为数组,下面有方式方法。  
        var args=Array.prototype.slice.call(arguments);//将arguments转变成真正的数组,并赋予args  
    }
    console.log(s + " args = " + args);  
}
myfunc2(4,4,"s","444");
var obj = new Object();
function a(){}
console.log(typeof (typeof a)); //alerts 'string'
console.log(" typeof a = " + typeof a); //alerts 'function'
console.log(" typeof obj = " + typeof obj); //alerts 'object'
console.log(" typeof null = " + typeof null); //alerts 'object'
console.log(" typeof false = " + typeof false); //alerts 'object'
console.log(" typeof new Array() = " + typeof new Array()); //alerts 'object'
console.log(" new Array()  = " + (new Array()) ); //alerts 空白
console.log(" []= " + ( [] ) ); //alerts 空白
console.log(" null instanceof Object = " + null instanceof Object); //evaluates false(null instanceof Object); //evaluates false
console.log(" false instanceof Boolean = " + false instanceof Boolean); // false

console.log(" new Array() == false => " + (new Array() == false) ); //evaluates true
console.log(" [] == false => " + ([] == false) ); //evaluates true
var emptyArray = []; //empty array
console.log(" emptyArray == false => " + ( emptyArray == false) ); //evaluates true

if (emptyArray) {
	console.log(" if(emptyArray) ==> true ");  //ture
} else {
	console.log(" if(emptyArray) ==> false ");
}

var zero = 0;
console.log(" 0 == false  => " + ( zero == false) ); //evaluates true – zero is a falsy
console.log(" 0 === false => " + ( zero === false) ); //evaluates false – zero is a number, not a boolean

var someVar = 'hello';
setTimeout(function() { alert(someVar); }, 1000);//out put  goodbye
var someVar = 'goodbye';


var someVar = 'hello';
setTimeout((function(someVar) {
	return function()  { alert(someVar); }//out put  hello 参数早就传进去了
})(someVar), 1000);
someVar = 'goodbye';


//http://coding.smashingmagazine.com/2011/05/30/10-oddities-and-secrets-about-javascript/
</script>
</head>

<body>

</body>
</html>



输出结果:


  • 大小: 23.6 KB
  • 大小: 7 KB
0
4
分享到:
评论
2 楼 413899327 2013-06-07  
rambolovepanda 写道
代码在 严格模式下  callee不管用的


时间戳: 2013-6-7 15:47:07
错误: TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

多谢提醒!
1 楼 rambolovepanda 2013-06-07  
代码在 严格模式下  callee不管用的

相关推荐

    JavaScript_一个脚本的集合,描述了编程语言的奇怪特性.zip

    2. 函数作为一等公民:在JavaScript中,函数是一种特殊的数据类型,可以作为变量赋值、作为参数传递、也可以作为返回值。 3. 基于原型的对象:JavaScript的对象继承是通过原型链来实现的,每个对象都有一个proto...

    freecodecamp-javascript:我的一些奇怪的解决方案

    基于“JavaScript”这个标签,我们可以推断出这个压缩包的内容将围绕JavaScript语言的相关知识展开,包括但不限于变量、数据类型、控制流、函数、对象、数组、原型链、闭包、异步编程(回调、Promise、async/await)...

    js中判断变量类型函数typeof的用法总结.docx

    `typeof`运算符作为基本工具之一,可以帮助开发者快速识别变量的数据类型。本文将深入探讨`typeof`运算符的功能、应用场景以及其局限性,并提供实用的解决方案。 #### 二、`typeof`运算符基础 `typeof`是一个一元...

    JavaScript中变量的相互引用

    在JavaScript中,变量的相互引用主要涉及到值的存储方式以及数据类型的特点。JavaScript有两大类基本数据类型(原始类型):原始值(如字符串、数字、布尔值等)和引用值(如对象、数组、函数)。原始类型是按值存储...

    field-js:一种非常奇怪的计算语言(设计尖峰)

    它可能引入了一些新的语法特性,比如更灵活的类型系统,或者是一种全新的面向领域特定的编程模型。这样的设计可能旨在提高代码的可读性,降低复杂性,或者鼓励开发者以不同的角度解决问题。 在"field-js-master"这...

    nobsjs.github.io

    - **变量与数据类型**:JavaScript支持var、let和const声明变量,数据类型包括基本类型(如字符串、数字、布尔值)和引用类型(如对象、数组、函数)。 - **控制结构**:包括条件语句(if...else)、循环(for、...

    vue.js 解决v-model让select默认选中不生效的问题

    这个问题通常涉及到数据加载顺序、异步操作以及数据类型匹配等多个方面。 首先,让我们分析这个问题的背景。在描述中提到,开发者遇到了一个奇怪的现象:`select`下拉框的`v-model`不能正常工作,即不能根据预设的...

    DWR.xml配置文件说明书(含源码)

    仅仅通过反射方法没有办法知道集合元素中的类型,所以上面的两个converter能将任何集合转换成相对javascript而言有意义的对象.然而没有办法将不同的集合类类型分别采用不同的转换方法.因为没有办法完全自动进行转换,...

    Autoboop:奇怪的网站,将猫的脸放在您的指针下

    TypeScript是JavaScript的一个超集,它提供了静态类型检查、接口、类和泛型等高级特性,这些都极大地提高了代码的可读性、可维护性和减少了运行时错误。在Autoboop中,TypeScript的使用确保了代码的稳定性和健壮性,...

Global site tag (gtag.js) - Google Analytics