`
HUO霍zp
  • 浏览: 11390 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
最近访客 更多访客>>
社区版块
存档分类
最新评论

var d=Date() 与 var d=new Date的区别

阅读更多
以下源码都来自webkit:
var d=Date() 与 var d=new Date的区别
前者只是一个普通的函数调用,是通过JSValue.getCallData来执行的,而后者是创建一个对象是通过 JSValue.getConstructData来执行的
因此两者可能存在本质的区别,区别在于调用返回时callData.native.function指向何处
通过对javascript core的分析可知,前者只是返回一个string,而后者则是创建了一个date对象
前者对应代码:
static JSValuePtr callDate(ExecState* exec, JSObject*, JSValuePtr, const ArgList&)
{
    DBUG_ENTER();
    time_t localTime = time(0);
    tm localTM;
    getLocalTime(&localTime, &localTM);
    GregorianDateTime ts(localTM);
    return jsNontrivialString(exec, formatDate(ts) + " " + formatTime(ts, false));
}

CallType DateConstructor::getCallData(CallData& callData)
{
    DBUG_ENTER();
    callData.native.function = callDate;
    return CallTypeHost;
}
后者对应的代码:
static JSObject* constructWithDateConstructor(ExecState* exec, JSObject*, const ArgList& args)
{
    DBUG_ENTER();
    return constructDate(exec, args);
}

ConstructType DateConstructor::getConstructData(ConstructData& constructData)
{
    DBUG_ENTER();
    constructData.native.function = constructWithDateConstructor;
    return ConstructTypeHost;
}



同样可以分析出var a=Array()和var a=new Array()是相同的
static JSObject* constructWithArrayConstructor(ExecState* exec, JSObject*, const ArgList& args)
{
    DBUG_ENTER();
    return constructArrayWithSizeQuirk(exec, args);
}

// ECMA 15.4.2
ConstructType ArrayConstructor::getConstructData(ConstructData& constructData)
{
    DBUG_ENTER();
    constructData.native.function = constructWithArrayConstructor;
    return ConstructTypeHost;
}

static JSValuePtr callArrayConstructor(ExecState* exec, JSObject*, JSValuePtr, const ArgList& args)
{
    DBUG_ENTER();
    return constructArrayWithSizeQuirk(exec, args);
}

// ECMA 15.6.1
CallType ArrayConstructor::getCallData(CallData& callData)
{
    DBUG_ENTER();
    // equivalent to 'new Array(....)'
    callData.native.function = callArrayConstructor;
    return CallTypeHost;
}
分享到:
评论

相关推荐

    input框中自动展示当前日期yyyy/mm/dd的实现方法

    直接上代码: <!DOCTYPE html> <html lang=en> <head>... var _input = document.getElementById('input');... var date = new Date(); var seperator = /; var year = date.getFul

    JS菜鸟网页上连续时间

    var date = new Date(); ``` #### 2. 获取年月日时分秒 通过日期对象的方法可以获取到年份、月份、日期、小时、分钟和秒等信息。需要注意的是,`getMonth()`方法返回的月份是从0开始计数的,因此需要加上1才能得到...

    js Date 获取 年 月 日 具体的值

    var dateStr = new Date("October 13, 1975 11:13:00"); ``` - **传递数字**:根据指定的年份、月份等数字创建`Date`对象。 ```javascript var dateNum = new Date(2023, 11, 12); // 注意月份是从0开始计数的 ...

    javascript中Date对象的使用总结.docx

    var date = new Date(parseInt(jsonDate.replace("/Date(", "").replace(")/", ""), 10)); return date; } ``` 该函数首先通过正则表达式去除JSON日期格式中的特殊字符,然后将剩余的时间戳部分转换为整数,并...

    最简单的JS闹钟实现.txt

    var date = new Date(); var hours = date.getHours(); var minutes = date.getMinutes(); var seconds = date.getSeconds(); // 将小时、分钟、秒数格式化为两位数 hours = formatTime(hours); minutes = ...

    Cookie与Login

    var time = new Date(); var expireDate = new Date(); expireDate.setTime(time.getTime() + 30 * (24 * 60 * 60 * 1000)); dateStr = formatCookieDate(expireDate,IE); setCookie("userName",userName,...

    JavaScript实现国庆倒计时小案例实现

    const targetDate = new Date(new Date().getFullYear(), 9, 1); const currentDate = new Date(); const remainingTime = targetDate - currentDate; const days = Math.floor(remainingTime / (1000 * 60 * 60...

    一个简单的js闹钟程序

    var date = new Date(); var hour = date.getHours(); var minute = date.getMinutes(); // 设置的闹钟的时间 var alarmHour = 10; var alarmMinute = 30; // 要求的闹钟执行的函数 function alarm() { ...

    获取上月、下月.txt

    Javascript获取上月、下月 var arr = date.split('-'); var year = arr[0];... //var days = new Date(year, month, 0); //days = days.getDate(); //获取当前日期中的月的天数 var year2 = year;

    很全的显示阴历(农历)日期的js代码

    function RunGLNL(){ var today=new Date(); var d=new Array(“星期日”,”星期一”,”星期二”,”星期三”,”星期四”,”星期五”,”星期六”); var DDDD=(today.getYear()<100 ? today.getYear()+1900:today....

    js获取当前时间源码分享

    var time = new Date(shijianchuo); var y = time.getFullYear(); var m = time.getMonth()+1; var d = time.getDate(); var h = time.getHours(); var mm = time.getMinutes(); var s = time.getSeconds(); ...

    js实现简单秒表走动的时钟特效

    本文实例介绍了javascript实现简单...var today=new Date() var h=today.getHours() var m=today.getMinutes() var s=today.getSeconds() // add a zero in front of numbers<10 m=checkTime(m) s=checkTime(s) docu

    layui实现把数据表格时间戳转换为时间格式的例子

    var date = new Date(v); var y = date.getFullYear(); var m = date.getMonth()+1; m = m<10?'0'+m:m; var d = date.getDate(); d = d<10?("0"+d):d; var h = date.getHours(); h = h<10?("0"+h):...

    JS 请假计算按小时

    var date=new Date(); var dat=document.all.item('a1').value; var a2=document.all.item('a2').value; var year="",y="",y2="",month="",m="",m2="",day="",d="",d2="",hour="",h="",h2="",hte1=0,hte2=0,minute=...

    js date转String 日期字符串转换

    var myDate = new Date(); console.log(myDate.getFullYear()); // 输出完整年份 console.log(myDate.getYear()); // 输出从1900开始的年份 ``` ##### 2.2 获取月份 - `getMonth()`:获取当前日期所在的月份(0-11...

    js内计算日期差

    var d = new Date("2014-10-10"); d.setDate(d.getDate() + 10); var nd = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate(); alert(nd); ``` 通过`setDate`方法,我们可以轻松地修改日期值。需要...

    跟我学习javascript的Date对象

    var dt = new Date(); console.log(dt); // 输出当前日期和时间 ``` - `new Date(milliseconds)`:从1970年1月1日00:00:00 UTC(不考虑时区)开始,以毫秒为单位创建Date对象。例如,向前或向后移动一分钟: `...

    js实现获取两个日期之间所有日期的方法

    var date = new Date(temp[0],temp[1],temp[2]); return date; } var start = "2012-3-25"; var end = "2012-4-3"; var startTime = getDate(start); var endTime = getDate(end); while((endTime

    javascript显示时间

    today = new Date(); // 创建一个Date对象,用于获取当前的日期和时间。 var day; // 用于存储星期几的字符串表示。 var date; // 该变量未被使用。 ``` ##### 2. 星期几的判断与赋值 ```javascript if (today....

    JS 实现活动日历代码

    var date = new Date(year, month, day); var tr = document.createElement('tr'); // 创建并添加日期单元格 var td = document.createElement('td'); td.textContent = day; td.date = date; // 检查是否...

Global site tag (gtag.js) - Google Analytics