GVKun编程网logo

目标值 Javascript(目标值=现况值-(现况值*改善重点*圈能力))

8

在这篇文章中,我们将为您详细介绍目标值Javascript的内容,并且讨论关于目标值=现况值-(现况值*改善重点*圈能力)的相关问题。此外,我们还会涉及一些关于HighPerformanceJavaS

在这篇文章中,我们将为您详细介绍目标值 Javascript的内容,并且讨论关于目标值=现况值-(现况值*改善重点*圈能力)的相关问题。此外,我们还会涉及一些关于High Performance JavaScript(高性能JavaScript)读书笔记分析_javascript技巧、JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧、JavaScript javaScript中的Date 以及对原生javaScript的扩展、Javascript Objects - Javascript语法基础 - Javascript核心的知识,以帮助您更全面地了解这个主题。

本文目录一览:

目标值 Javascript(目标值=现况值-(现况值*改善重点*圈能力))

目标值 Javascript(目标值=现况值-(现况值*改善重点*圈能力))

如何解决目标值 Javascript?

我这里有一个带有 2 个函数的 html 代码,我不知道为什么当我定位 #padala-result 值时 padala_condition 函数不起作用。我尝试过其他 ID 并且效果很好。

  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <form>
      <div>
            <span>B. Input ang amount na ipapadala  </span>
            <input name="entry.1812134286" id="padala-pera"  type="number"  required="">
          </div>
          <br>
           <div>
                  <span>C. Total Babayaran: <span id="padala-result"></span> Magkano po ang inyong ibabayad? Ang charge ay 3% Ex. kung ang pinadala ay ₱1,000 ang charge po ay ₱30 ang total na babayaran ay ₱1,030. Dapat ang perang ibabayad ay pareho o mas mataas sa babayaran. </span>
            <input type="number" name="entry.401397408" id="bayad-padala-amount" placeholder="Input Amount" min="0" max="500000" step="any" required="">
          </div>
          <br>
           <button type="submit" id="padala-submit">Submit</button>
       </form>

<script>
    (function padala () {
    
    $(''#padala-pera'').keyup(function() {
     let val = +$(this).val();
     let total = val + Math.ceil((Math.ceil(val / 500.0) * 500) * 0.03)
     if (val<=1000){
     total = val + 30
     }
      $(''#padala-result'').text(`₱${Math.ceil(total)}`);
    });
    
    })();
    
    (function padala_condition () {
      $("#bayad-padala-amount").focusout(function(){ 
        if(parseInt($("#padala-pera").val()) > parseInt($("#padala-result").val()))
        {
            alert("Paki-Check po ang Ibinayad");
            $("#padala-submit").prop(''disabled'',true);
        }
        else {
            $(".error").css("display","none");
            $("#padala-submit").prop(''disabled'',false);        
        }
        
    });
    
    })();

</script>

解决方法

不是$("#padala-result").val()。 Value 属性适用于输入字段。 #padala-result 是一个跨度并且您已经设置了跨度的 text 属性。因此,您必须像 text 一样读取 $("#padala-result").text() 属性本身。这将为您提供带有 符号前缀的文本。因此,要获得真正的数值,您必须像

这样对文本进行子字符串化
var padalaResult = $("#padala-result").text();
padalaResult = padalaResult.substring(1,padalaResult.length);

工作示例

(function padala() {

    $(''#padala-pera'').keyup(function () {
        let val = +$(this).val();
        let total = val + Math.ceil((Math.ceil(val / 500.0) * 500) * 0.03)
        if (val <= 1000) {
            total = val + 30
        }
        $(''#padala-result'').text(`₱${Math.ceil(total)}`);
    });

})();

(function padala_condition() {
    $("#bayad-padala-amount").focusout(function () {
        var padalaResult = $("#padala-result").text();
        padalaResult = padalaResult.substring(1,padalaResult.length);
        if (parseInt($("#padala-pera").val()) > parseInt(padalaResult)) {
            alert("Paki-Check po ang Ibinayad");
            $("#padala-submit").prop(''disabled'',true);
        }
        else {
            $(".error").css("display","none");
            $("#padala-submit").prop(''disabled'',false);
        }

    });

})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
    <div>
        <span>B. Input ang amount na ipapadala </span>
        <input name="entry.1812134286" id="padala-pera" type="number" required="">
    </div>
    <br>
    <div>
        <span>C. Total Babayaran: <span id="padala-result"></span>
        <br>
        Magkano po ang inyong ibabayad? Ang charge ay 3%
            Ex. kung ang pinadala ay ₱1,000 ang charge po ay ₱30 ang total na babayaran ay ₱1,030. Dapat ang perang
            ibabayad ay pareho o mas mataas sa babayaran. </span>
            <br>
        <input type="number" name="entry.401397408" id="bayad-padala-amount" placeholder="Input Amount" min="0"
            max="500000" step="any" required="">
    </div>
    <br>
    <button type="submit" id="padala-submit">Submit</button>
</form>

High Performance JavaScript(高性能JavaScript)读书笔记分析_javascript技巧

High Performance JavaScript(高性能JavaScript)读书笔记分析_javascript技巧

第一章:加载和执行

浏览器的JavaScript的引擎是编译器层的优化;
当浏览器执行JavaScript代码时,不能同时做其他任何事情(单一进程),意味着<script>标签每次出现都霸道地让页面等带脚本的解析和执行(每个文件必须等到前一个文件下载并执行完成才会开始下载),所以头部的JS和CSS用来渲染页面,交互行为(几乎所有)的JS放在<body>底部; <BR>主流浏览器都允许并行下载JS。 <BR>减少外链脚本数量将会改善性能(合并JS) <BR>任何网站都可以使用一个把制定文件合并处理后的URL来获取任意数量的文件。 <BR>defer属性可延迟脚本(只有IE4 和FF3.5 支持) <BR><STRONG>第二章:数据访问 <br><br>JavaScript中有四种基本的数据存取位置: 直接量,变量,数组元素(以数字作为索引),对象成员(以字符床作为索引)。 <BR>访问直接量和局部变量的速度最快,相反,访问数组元素和对象成员相对较慢。 <BR>属性或方法在原型链中的位置越深,访问它的速度也越慢。 <BR>通常来说,可以通过吧常用的对象,数组元素,跨越变量保存在局部变量中来改善JavaScript性能。 <BR><STRONG>第三章:DOM编程 <br><br>DOM操作在webkit内核的浏览器速度快,其他的浏览器innerHTML执行快。 <BR>访问和操作DOM是现代WEB应用的重要部分。但每次穿越链接ECMAScript和DOM两个岛屿之间的桥梁都会被收取‘过桥费''. <BR>要留意重回和重排。 <BR>在IE中:hover会降低响应速度。 <BR><STRONG>第四章:算法和流程控制 <BR><BR>避免使用for-in循环,除非需要遍历一个属性数量位置的对象。 <BR>了解栈溢出错误。 <BR><STRONG>第五章:字符串和正则表达式 <br><br>回溯既是正则表达式匹配功能的基本组成部分,也是正则表达式的低效之源。 <BR><STRONG>第六章:快速响应的用户界面 <br><br>任何JavaScript任务都不应当执行超过100毫秒。 <BR>Web workers是新版浏览器支持的特性。 <BR>没有什么JavaScript代码会重要到可以影响用户体验的程度. <BR><STRONG>第七章:Ajax <br><br>JSON是轻量级的数据格式,解析速度快。 <BR>减少请求数,可通过合并JS和CSS,还有IMG。 <BR>缩短页面加载时间,页面主要内容加载完成后,用Ajax获取那些次要的文件。 <BR><STRONG>第八章:编程实践 <br><br>大多数的时候,没必要使用eval()和Function(),因此最好避免使用它们。至于setTimeout()和setInterval(),建议传入函数而不是字符串来作为第一个参数。 <BR>在JavaScript中创建对象和数组的方法有多种,但使用对象和数组直接量是最快的方式(对象属性和数组项越多,使用直接量的好处就越明显)。 <BR>不要重复工作:延迟加载;条件预加载. <BR>多使用原生方法,因为更快。 <BR><STRONG>第九章:构建并部署高性能JavaScript应用 <br><br>PV(page view)即页面浏览量或点击量。 <BR>减少页面渲染所需的HTTP请求数,特别是针对那些首次访问网站的用户。 <BR>JavaScript压缩。 <BR>JavaScript缓存。 <BR>使用内容分发网络(CDN) <BR>第十章主要介绍工具:如firebug,YSlow,和一些性能分析. </script>

JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧

JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧

1、防止滥用JavaScript“不管你想通过JavaScript改变哪个网页的行为,都必须三思而后行。首先要确认:为这个网页增加这种额外的行为是否确有必要?”

个人认为,作者的这句话放在当前几乎无处不用JavaScript来增强Web页面交互体验的时代,可以理解为应该适当的使用JavaScript,而不要因为使用了实现酷炫效果的脚本导致网页加载缓慢或者兼容性极差而舍本求末,导致用户无法浏览和使用网站。

2、平稳退化平稳退化是指当用户禁用浏览器JavaScript或浏览器不支持JavaScript(还有吗)时,应该让用户仍然可以正常的浏览网站。

刚看到这个问题的时候,感觉这种情况几乎可以忽略不计,因此看了一些关于这个问题的讨论(知乎)以及博文《javascript不可用的问题探究》,并拿博客园首页做了实验,即在禁用JavaScript的情况下浏览网页,发现虽然无法评论博客、无法正常显示分类效果、当然广告也没了,但是主要的功能(查看博文、分页跳转等)是可以正常使用的。

那么基本可以得出结论:在考虑平稳退化的时候,根据需要至少应该保证网站主要功能可以正常使用。对博客园来说,就是查看博客。

3、禁用"javascript:"伪协议和内嵌事件处理函数虽然在HTML中使用这两种写法,不会带来什么严重问题,但是它会阻止平稳退化(网页行为不一致),并且使脚本的编写方式混乱,增加了代码维护的难度。

4、性能考虑关于性能考虑的最佳实践,还是非常容易理解的。

“尽量少访问DOM和尽量减少标记”。少访问DOM是因为查询DOM的操作会非常耗费性能。多处函数的重复DOM查询应该进行重构,提取为全局变量或者直接作为参数进行传递。减少标记可以减小DOM的规模,从而减少查找DOM树中特定元素的时间。

“合并脚本”。合并外部脚本文件,可以减少加载页面时发送的请求次数。通过观察Chrome开发者工具Network标签,可以非常清楚的看到加载网页的请求次数和时间,下图为请求我的博客的情况,第三方的百度分享插件是最慢被加载的,当然整体加载时间还是可以接受的。不过当引用的文件过多过大,或者依赖的第三方插件请求缓慢时,整个页面就会一直处于加载状态,给人的感觉就是网页加载缓慢,体验就会变差。



另外,“脚本在标记中的位置对页面的初次加载时间也有很大的影响”。就像bootstrap的实例中,引用的JS插件统统放在了页面的尾部,并加了说明。

JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧
因为根据HTTP规范,浏览器每次从同一个域名中最多只能同时下载两个文件,而在脚本下载期间,浏览器不会下载其它任何文件,即使是来自不同域名的文件也不会下载,所有其它的资源都要等脚本加载完毕后才会下载;而通常我们会把脚本文件放在块中,此时该块中的脚本会导致浏览器无法并行加载其它文件(如图片或其它脚本)。

把所有 <script> 标签放在文档的末尾,</script>

JavaScript javaScript中的Date 以及对原生javaScript的扩展

JavaScript javaScript中的Date 以及对原生javaScript的扩展

原生JavaScript中的Date

JS Date 对象用于处理日期和时间。
创建 Date 对象的语法:
var myDate=new Date()
Date 对象会自动把当前日期和时间保存为其初始值。
参数形式有以下5种:  

new Date("month dd,yyyy hh:mm:ss");
new Date("month dd,yyyy");
new Date(yyyy,mth,dd,hh,mm,ss);
new Date(yyyy,mth,dd);
new Date(ms);

经测试一下几种也可以:

new Date(yyyy-MM-dd HH:mm:ss);

new Date(yyyy/MM/dd HH:mm:ss);

测试截图:


注意最后一种形式,参数表示的是需要创建的时间和GMT时间1970年1月1日之间相差的毫秒数。各种函数的含义如下:

month:用英文表示月份名称,从January到December

mth:用整数表示月份,从0-11(1月到12月)

dd:表示一个月中的第几天,从1到31

yyyy:四位数表示的年份

hh:小时数,从0(午夜)到23(晚11点)

mm:分钟数,从0到59的整数

ss:秒数,从0到59的整数

ms:毫秒数,为大于等于0的整数

如:

new Date("January 12,2006 22:19:35");

new Date("January 12,2006");

new Date(2006,0,12,22,19,35);

new Date(2006,0,12);

new Date(1137075575000);

 

Date() 返回当日的日期和时间。 
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。
getFullYear() 从 Date 对象以四位数字返回年份。
getYear() 请使用 getFullYear() 方法代替。
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。
getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。
getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。
getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。
getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。
getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。
getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。
parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。
setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。
setMonth() 设置 Date 对象中月份 (0 ~ 11)。
setFullYear() 设置 Date 对象中的年份(四位数字)。
setYear() 请使用 setFullYear() 方法代替。
setHours() 设置 Date 对象中的小时 (0 ~ 23)。
setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。
setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。
setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。
setTime() 以毫秒设置 Date 对象。
setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。
setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。
setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。
setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。
setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
toSource() 返回该对象的源代码。
toString() 把 Date 对象转换为字符串。
toTimeString() 把 Date 对象的时间部分转换为字符串。
toDateString() 把 Date 对象的日期部分转换为字符串。
toGMTString() 请使用 toUTCString() 方法代替。
toUTCString() 根据世界时,把 Date 对象转换为字符串。
toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。
toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。
toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。
UTC() 根据世界时返回 1997 年 1 月 1 日 到指定日期的毫秒数。
valueOf() 返回 Date 对象的原始值。



对JavaScript中的Date格式化的扩展

方法一:这个很不错,好像是 csdn 的 Meizz 写的: 

// 对Date的扩展,将 Date 转化为指定格式的String
  • // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
  • // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  • // 例子:
  • // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  • // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  • Date.prototype.Format = function(fmt)
  • { //author: meizz
  • var o = {
  • "M+" : this.getMonth()+1, //月份
  • "d+" : this.getDate(), //日
  • "H+" : this.getHours(), //小时
  • "m+" : this.getMinutes(), //分
  • "s+" : this.getSeconds(), //秒
  • "q+" : Math.floor((this.getMonth()+3)/3), //季度
  • "S" : this.getMilliseconds() //毫秒
  • };
  • if(/(y+)/.test(fmt))
  • fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  • for(var k in o)
  • if(new RegExp("("+ k +")").test(fmt))
  • fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  • return fmt;
  • };

  • 调用方法:

    [javascript] view plain copy
    1. var time1 = new Date().Format("yyyy-MM-dd HH:mm:ss");     
    2.   
    3. var time2 = new Date().Format("yyyy-MM-dd");    

     



    方法二:

    [javascript]  view plain  copy
    1. <mce:script language="javascript" type="text/javascript"><!--  
    2.         
    3. /**       
    4.  * 对Date的扩展,将 Date 转化为指定格式的String       
    5.  * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符       
    6.  * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)       
    7.  * eg:       
    8.  * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423       
    9.  * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04       
    10.  * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04       
    11.  * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04       
    12.  * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18       
    13.  */          
    14. Date.prototype.pattern=function(fmt) {           
    15.     var o = {           
    16.     "M+" : this.getMonth()+1, //月份           
    17.     "d+" : this.getDate(), //日           
    18.     "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时           
    19.     "H+" : this.getHours(), //小时           
    20.     "m+" : this.getMinutes(), //分           
    21.     "s+" : this.getSeconds(), //秒           
    22.     "q+" : Math.floor((this.getMonth()+3)/3), //季度           
    23.     "S" : this.getMilliseconds() //毫秒           
    24.     };           
    25.     var week = {           
    26.     "0" : "/u65e5",           
    27.     "1" : "/u4e00",           
    28.     "2" : "/u4e8c",           
    29.     "3" : "/u4e09",           
    30.     "4" : "/u56db",           
    31.     "5" : "/u4e94",           
    32.     "6" : "/u516d"          
    33.     };           
    34.     if(/(y+)/.test(fmt)){           
    35.         fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));           
    36.     }           
    37.     if(/(E+)/.test(fmt)){           
    38.         fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "/u661f/u671f" : "/u5468") : "")+week[this.getDay()+""]);           
    39.     }           
    40.     for(var k in o){           
    41.         if(new RegExp("("+ k +")").test(fmt)){           
    42.             fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));           
    43.         }           
    44.     }           
    45.     return fmt;           
    46. }         
    47.        
    48. var date = new Date();        
    49. window.alert(date.pattern("yyyy-MM-dd hh:mm:ss"));  
    50. // --></mce:script>      

     


    方法三:

    [javascript]  view plain  copy
    1. Date.prototype.format = function(mask) {        
    2.        
    3.     var d = this;        
    4.        
    5.     var zeroize = function (value, length) {        
    6.        
    7.         if (!length) length = 2;        
    8.        
    9.         value = String(value);        
    10.        
    11.         for (var i = 0, zeros = ''; i < (length - value.length); i++) {        
    12.        
    13.             zeros += '0';        
    14.        
    15.         }        
    16.        
    17.         return zeros + value;        
    18.        
    19.     };          
    20.        
    21.     return mask.replace(/"[^"]*"|'[^']*'|/b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])/1?|[lLZ])/b/g, function($0) {        
    22.        
    23.         switch($0) {        
    24.        
    25.             case 'd':   return d.getDate();        
    26.        
    27.             case 'dd':  return zeroize(d.getDate());        
    28.        
    29.             case 'ddd'return ['Sun','Mon','Tue','Wed','Thr','Fri','Sat'][d.getDay()];        
    30.        
    31.             case 'dddd':    return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][d.getDay()];        
    32.        
    33.             case 'M':   return d.getMonth() + 1;        
    34.        
    35.             case 'MM':  return zeroize(d.getMonth() + 1);        
    36.        
    37.             case 'MMM'return ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][d.getMonth()];        
    38.        
    39.             case 'MMMM':    return ['January','February','March','April','May','June','July','August','September','October','November','December'][d.getMonth()];        
    40.        
    41.             case 'yy':  return String(d.getFullYear()).substr(2);        
    42.        
    43.             case 'yyyy':    return d.getFullYear();        
    44.        
    45.             case 'h':   return d.getHours() % 12 || 12;        
    46.        
    47.             case 'hh':  return zeroize(d.getHours() % 12 || 12);        
    48.        
    49.             case 'H':   return d.getHours();        
    50.        
    51.             case 'HH':  return zeroize(d.getHours());        
    52.        
    53.             case 'm':   return d.getMinutes();        
    54.        
    55.             case 'mm':  return zeroize(d.getMinutes());        
    56.        
    57.             case 's':   return d.getSeconds();        
    58.        
    59.             case 'ss':  return zeroize(d.getSeconds());        
    60.        
    61.             case 'l':   return zeroize(d.getMilliseconds(), 3);        
    62.        
    63.             case 'L':   var m = d.getMilliseconds();        
    64.        
    65.                     if (m > 99) m = Math.round(m / 10);        
    66.        
    67.                     return zeroize(m);        
    68.        
    69.             case 'tt':  return d.getHours() < 12 ? 'am' : 'pm';        
    70.        
    71.             case 'TT':  return d.getHours() < 12 ? 'AM' : 'PM';        
    72.        
    73.             case 'Z':   return d.toUTCString().match(/[A-Z]+$/);        
    74.        
    75.             // Return quoted strings with the surrounding quotes removed        
    76.        
    77.             default:    return $0.substr(1, $0.length - 2);        
    78.        
    79.         }        
    80.        
    81.     });        
    82.        
    83. };      

    Javascript Objects - Javascript语法基础 - Javascript核心

    Javascript Objects - Javascript语法基础 - Javascript核心

    原文: http://pij.robinqu.me/Javascript_Core/Javascript_Basics/Objects.html

    源代码: https://github.com/RobinQu/Programing-In-JavaScript/blob/master/chapters/JavaScript_Core/Javascript_Basics/Objects.md

    Javascript Objects

    创建对象

    类继承

    Javascript对象拥有自有属性和继承属性。

    可以使用in 或者 hasOwnProperty 来判断对象中是否存在属性。

    对象属性

    可以使用 for..in 来遍历对象的属性

    使用for..in时会遍历到原型链上的属性。遍历顺序是以广度优先遍历

    所以使用hasOwnProperty便可以判断是否是对象自有的属性。

    使用Object.getOwnPropertyDescriptor()获取对象特定属性的描述符

    可写性(writable) 表示对象属性是否可写

    例如

    var o = {
        foo : ''bar''
    }
    
    Object.defineProperty(o, "foo", { writable : false });
    
    o.foo = ''world'';
    console.log(o.foo);//仍然输出bar
    

    可枚举性(enumerable) 表示对象属性是否可枚举

    例如
    Array中的length等属性的 enumerable是false,所以,

    for (p in Array) {
        console.log(p);
    }
    

    什么也不输出

    可配置性(configurable) 表示可否修改属性的可配置性和可枚举性

    可以用Object.defineProperties来定义这些配置属性。

    Object.defineProperty(o, "foo", { writable : false });
    

    Get 表示获取对象属性的方法
    Set 表示设置对象属性的方法

    示例

    var book = {
        _year: 2004,
        edition: 1
    };
    Object.defineProperty(book, "year", {
        get: function () {
            console.log(''get year'');
            return this._year;
        },
        set: function (newValue) {
            console.log(''set year'');
            if (newValue > 2004) {
                this._year = newValue;
                this.edition += newValue - 2004;
            }
        }
    });
    book.year = 2005;//控制台输出‘set year’
    console.log(book.year);//控制台输出‘get year’和year的值
    

    对象方法

    可执行对象

    通过如下方法可以创建一个可执行对象

    function bar(o) {
        var f = function() { return "Hello World!"; }
        o.__proto__ = f.__proto__;
        f.__proto__ = o;
        return f;
    }
    
    var o = { x: 5 };
    var foo = bar(o);
    
    console.log(foo());
    console.log(foo.x);
    console.log(typeof foo);//function
    

    既可以当作对象来使用(有原型链),也可以当作函数来直接调用

    今天的关于目标值 Javascript目标值=现况值-(现况值*改善重点*圈能力)的分享已经结束,谢谢您的关注,如果想了解更多关于High Performance JavaScript(高性能JavaScript)读书笔记分析_javascript技巧、JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧、JavaScript javaScript中的Date 以及对原生javaScript的扩展、Javascript Objects - Javascript语法基础 - Javascript核心的相关知识,请在本站进行查询。

    本文标签:

    上一篇未捕获的 EvalError:拒绝将字符串评估为 JavaScript,因为 'unsafe-eval' 不是允许的源...在 vue-pdf 中

    下一篇javamail MimeBodyPart.SetFileName() 使图像变得奇怪 java(java图片显示)