[,,,].join(", ")
-
some codes:
function foo() { } var oldName = foo.name; foo.name = "bar"; [oldName, foo.name]
var a = new Date("epoch")
-
some codes:
var a = Function.length, b = new Function().length a === b
第1点,如2楼所述,我要补充的是在IE9以下的版本中,会创建4项数据,每一项都是undefined, 不建议这样创建数组
1 . 将数组元素用逗号相连(串连),[1,2,3].join(',')结果“1,2,3”,注意最后面没有逗号。
2 . foo.name是函数的名字,所以oldName是"foo",你可以试下将一个匿名函数赋值给foo
var foo = function() {};
var oldName = foo.name;
foo.name = "bar";
[oldName, foo.name];
3 . 构造一个Date对象,似乎是无效的; 如果要获得当前的时间,可以用“new Date()"
var d = new Date();
// 获得unixtime
d.getTime();
4 . 是比较对象的长度么?
[,,,]
返回的是一个[undefinedx3]
的数组。为什么是3个而不是4个,那是因为最后一个逗号因为最后一个元素没有被定义而被忽略了,类似于[1,2,3,]
。至于对此空数组做连接就不多表,有图有真相。-
返回结果还是
['foo','foo']
,因为ECMA规定了foo.name
这个值是可读不可写的。This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }. - Function name
返回
Invaild Date
。Date类解析字符串时间的格式是使用Date.parse
函数的,关于函数支持的时间字符串格式 MDN 上有详细的说明,具体不多表,有图有真相。-
返回
false
。这个问题等同于问Function.length === Function.prototype.length
。一个是Function
自己参数的长度,一个是通过Function
构造函数继承过来参数的长度。至于答案为什么分别是1和0,MDN上也有比较清楚的说明:Data property of the Function constructor
The Function constructor is itself a Function object. It's length data property has a value of 1. The property attributes are: Writable: false, Enumerable: false, Configurable: true.
Property of the Function prototype object
The length property of the Function prototype object has a value of 0.
- Function.length
[,,,]
虽然是有三个逗号,但它是三个元素,数组字面量最后一个逗号如果没有内容就会被忽略,[1,2,3,]和[1,2,3]是一样的。三个元素join的时候,会只用两个分隔符插值,比如[1,2,3].join()
的时候会变成"1,2,3"
,最后一个元素不会被插入分隔符。函数的name这个属性,修饰符定义为
{configurable:false,enumerable:false,writable:false}
,意思是不可删、枚举不到、不可该写,你如何前面加"use strict"
;就会发现foo.name = "bar"
这句会提示TypeError,函数的name在定义的时候就已经被指定了,所以这里都是"foo"Date构造器如果碰到无法解析成时间的字符串时,都会返回
Invalid Date
,注意这还是一个Date
,拥有正常Date
的所有方法,比如getTime()
、getDay()
之类的一个函数的length,和它被定义的时候有关,举个例子
function sum(a,b){}
这个函数在定义的时候指定了两个参数,所以sum.length
也等于2。new Function()
生成了一个空函数,类似于function abc(){}
,它的length的默认值自然就是0了Function
作为一个构造函数,本身也是一个函数,它的length为1,这个可以参见ES5规范文档。
问题2
结果肯定是 ['foo','foo']了。
Function.name
是只读的,代表了函数的名称。匿名函数名称为 ''
,例如:
function mew(){}
var meo=function(){};
console.log(mew.name); // 'mew'
console.log(meo.name); // ''
问题3
var
表达式应该是undefined
吧。这里的a是Invalid Date
或者是NaN
(IE下吧)
问题4
Function.length
是函数参数的个数,new Function()
则是定义了一个“空”的函数,当然参数个数为零,而Function
本身的构造函数参数是不固定的,但Function.length
的返回值被定义为1
,所以这个表达式的结果为false。
上面的解答没有查文档,如果希望了解更详细的内容,可以Google一下相关的关键词。