热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript温故知新01

严格模式ECMAScript5引入严格模式Strictmode——为JAvaScript定义了一种不同的解析&执行模型在严格模式下,ECMAscript3中的一些不明确的行为将会被

严格模式

ECMAScript 5 引入严格模式 Strict mode ——为Javascript定义了一种不同的解析&执行模型

在严格模式下,ECMAscript 3 中的一些不明确的行为将会被处理&&对某些个不安全的操作 also

      抛出错误

在整个脚本中应用严格模式——顶部添加代码:

"use strict";
——编译指示,告诉支持的 Javascript 引擎切换到严格模式
——为了不破坏 ECMAscript 3 语法而特定选定的
函数内部 also can use ——指定函数在严格模式下执行:
function myFunction() {

"use strict";
//.......
}
严格模式下,Javascript 的执行结果会有很大不同
支持严格模式: IE 10.0、 Firefox 4+、Safari 5.1+、Opera 12+、Chrome


 关键字

break         do          instanceof    typeof  case        else   new     var   

catch         finally      return          void     continue   for    switch  while

debugger  function   this               with     default      if      throw  delete

in   try

 保留字(略)


变量

——松散类型【可以用来保存人任何类型的数据】= each 变量仅仅是一个用于保存值的占位符

使用 var 操作符定义的变量——成为定义该变量作用域中的局部变量

e.g

function myFunction() {
var str = "Hey"; //局部变量
}
myFunction();
alert(str);
// error!!!
/*

* 变量 str 在函数中使用 var 定义
* myFunction()被调用时,创建 str 变量并为其赋值 “Hey"
* 之后,变量 str 立即被销毁 alert(str) 出错
*/
//省略 var 操作符 创建全局变量
function myFunction() {
str
= "Hey"; //局部变量
}
myFunction();
alert(str);
// “Hey” str 可以在函数外部任何地方被访问

 

!!!以上并不推荐!!!

——难维护

——混乱

——严格模式下 抛出 ReferenceError 错误

var str = "Hey",
name
= true,
inf
= 233;
//在严格模式下,不能定义名为 eval、arguments 的变量——会报语法错误

 

 数据类型

5 中基本数据类型

Undefined  Null  Boolean  Number  String

1种复杂数据类型

Object——由一组无序名值对组成

typeof 操作符

技术分享图片技术分享图片技术分享图片

 

 技术分享图片技术分享图片Chrome 浏览器中测试

Undefined  类型——只有一个值:undefined

Null  类型——只有一个值的数据类型:null

!!!如果定义的变量将在以后保存对象——最好初始化为 null 

【so 只要直接检查 null 值就可以知道相应的变量是否已经保存了一个对象的引用】

技术分享图片

!!!null  和 undefined 用途完全不同

——只要当想要保存对象的变量还没有真正的保存对象,就应该明确的让该变量保存 null 值

——体现 null 作为空对象指针、进一步区分 null 和 undefined

Boolean:只有 2 个 字面值: true 和  false【区分大小写】

!!!与数字值1 和 0 不是一回事儿

技术分享图片技术分享图片

 

 技术分享图片技术分享图片

技术分享图片

!!!如上——str 被自动转换为Boolean 值 true!!!

在控制流中存在此现象,可能会完全改变原程序的流程——错误的使用一个对象BUT not a Boolean 值

Number 类型:

IEEE754格式表示整数和浮点数(双精度数值)

var intNumber = 66; //十进制直接输入
var octalNumber = 062; //八进制第一位必须是 0 零
//无效时直接解析为十进制
var ocN1 = 069; //无效八进制——解析为十进制 69
var ocN2 = 09; //无效,9

 

!!! 八进制字面量在严格模式下无效!!! 支持 Javascript  引擎会抛出错误

十六进制字面值前两位必须是 0x, 后面【0-9 A-F|a-f】

var hexNumber0 = 0xB; //十六进制 11
var hexNumber1 = 0X2a;

 

 算数运算时,all 以八进制 和 十六进制表示的数值最终转换为十进制数值

!!! 正零(+0) 和 负零 (-0) 相等

浮点数值:必须包含小数点

!!! 保存浮点数值需要的内存空间是保存 整数值的 2 倍——ECMAscript 会将其转换为整数值

浮点数值最高精度 17 为小数

!!!算数运算时,其精度差于整数

e.g  0.1 + 0.2  = 0.30000000000000004【15个0】!!!! 不是0.3呀!!!

——IEEE 754 的通病~~~~

数值范围:

Number.MIN_VALUE: 5e-324 ( 大多 browser 中)

Number.MAX_VALUE:1.7976931348623157e+308 ( 大多 browser 中)

超出Javascript数值范围时:自动转换为特殊的 正负Infinity(+-)

此时该数无法参与下次运算

use isFinite()  函数判断是否在范围内——之间时 return true, 超出 return false

NaN:Not a Number

——原本想要返回数值的操作数,未能返回数值时【避免抛出 error】

e.g   5 / 0 return NaN 而不会出现错误以停止代码执行

——任何涉及 NaN 的操作 都会 return NaN

——NaN 与任何值都不相等 include NaN 本身

技术分享图片

以上,ECMAscript 定义了 isNaN() 函数

技术分享图片isNaN 确定参数是否“不是数值”

↗可以看出将参数转换为数值。不是数值的值会直接转换为数值“12”, true

任何不能被转换为数值的值都会返回 true;

数值转换

Number()、parseInt()、parseFloat()

以上 3 个函数能够将非数值转换为数值

技术分享图片技术分享图片技术分享图片

Number() 在转换字符串时有点复杂&&不大合理

处理整数时often use parseInt()

——更多的看其是否符合数值模式

技术分享图片技术分享图片技术分享图片

如上 图 3 八进制没有依然忽略 0 直接十进制显示 ECMAscript 5 中

为了消除上述困惑——指定基数

技术分享图片技术分享图片

parseFloat()基本原理同上 BUT 始终忽略第一个“0”

技术分享图片

String 类型

——由 0 or 多个 16 位的 Unicode 组成的字符串 “” ‘’ 均可

字符字面量:

技术分享图片

——字符串是不可变的

——一旦创建,其值不能改变

——要改变变量保存的字符串,首先销毁原字符串

——再用另外一个包含新的值字符串填充该变量

var str = "Hey Jude";
str
= str + "Do make sad";

 

 转换为字符串

way 1: toString() 方法

——return 相应值的字符串表现

技术分享图片

Number、Boolean、String、Object 都有toString() 方法

!!!BUT null 和 undefined 值没有此方法!!!

——多数情况下不用传参

——调用数值时,传递一个参数:输出数值的基数

——默认情况下,以十进制格式返回数值的字符串表示

——传递参数以指定的任意有效进制格式表示字符串值

技术分享图片

way 2: String()

——不知道要转换的值是不是 null or undefined 时,use String()

——可以将任何类型的值转换为字符串

规则如下:

—— if 值有 toString() 方法,调用该方法

—— if 值 是 null , return “null”

—— if 值 是 undefined, return “undefined”

技术分享图片

Object 类型

—— 一组数据和功能的集合

—— 可以通过执行 new 操作符 + 要创建的对象类型名称来创建

—— 创建 Object 类型的实例&&为其添加属性和方法,即可创建自定义对象

 

var obj = new Object();
//如果不给构造函数传递参数,可以省略“ () ”
var obj = new Object; //有效——不推荐
//Object 是所有其实例的基础

 

 

 

 Object 每个实例都具有的属性&方法

——Constructor: 构造函数     保存用于创建当前对象的函数

——hasOwnProperty(propertyName):检查给定属性在当前对象实例中【not in 实例原型】

    是否存在。参数的属性名必须以字符串形式指定

——isPrototypeOf(object):检查传入的对象是否是另一个对象的原型

——propertyIsEnumberable(propertyName):检查给定属性是否能够使用 for-in 语句来枚举

    参数的属性名必须以字符串形式指定

——toLocaleString(): return 对象的字符串表示,该字符串与执行环境地区对应

——toString(): return 对象的字符串表示

——valueOf(): return 对象字符串、数值、布尔值表示。usually 同 toString() 返回值相同

 


推荐阅读
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • Win10 S系统与Chrome浏览器兼容性问题分析
    2017年5月2日,微软在美国推出了最新的Windows 10 S操作系统,专为教育领域设计,旨在为教师和学生提供一系列高效的产品和服务。该系统的最大特点是其简洁的设计和快速的响应速度,然而在与某些应用的兼容性方面,特别是Chrome浏览器,仍存在一些问题。本文将深入分析这些兼容性问题,并探讨可能的解决方案。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
author-avatar
dmcm0007
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有