需要牢记的JavaScript基础知识


Posted in Javascript onSeptember 25, 2016

声明(Declarations)

undefined值在布尔类型环境中会被当作false。

数值类型环境中undefined值会被转换为NaN。

对一个空变量求值时,空值 null 在数值类型环境中会被当作0来对待,而布尔类型环境中会被当作false

JavaScript 变量感觉上是被“提升”或移到了所有函数和语句之前。提升后的变量将返回 undefined 值,所以即使在使用或引用某个变量之后存在声明和初始化操作,这个被提升的引用仍将得到 undefined 值。

由于存在变量声明提升,一个函数中所有的var语句应尽可能地放在接近函数顶部的地方。这大大地提升了程序代码的清晰度。

(在 ECMAScript 2015 中,let(const)将不会提升变量到代码块的顶部。因此,在变量声明之前引用这个变量,将抛出错误ReferenceError。这个变量将从代码块一开始就处在一个“暂时性死区”,直到这个变量被声明为止。)

对于函数,只有函数声明会被提升到顶部,不包括函数表达式。

/* 函数声明 */
foo(); // "bar"  
function foo() {
 console.log("bar");
}  

/* 函数表达式  表达式定义的函数,成为匿名函数。匿名函数没有函数提升。*/  
baz(); // TypeError: baz is not a function
//此时的"baz"相当于一个声明的变量,类型为undefined。
由于baz只是相当于一个变量,因此浏览器认为"baz()"不是一个函数。
var baz = function() {
 console.log("bar2");
};

全局对象是 window,你可以通过指定 window 或 frame 的名字,从一个 window 或 frame 访问另一个 window 或 frame 中声明的变量。例如,设想一个叫 phoneNumber 的变量在文档里被声明,你可以在子框架里用 parent.phoneNumber 来引用它。

常量(Constants)

在同一作用域中,不能用与变量或函数同样的名字来命名常量。然而,对象属性是不受保护的,所以下面的语句执行没有问题。

const MY_OBJECT = {"key": "value"};
MY_OBJECT.key = "otherValue";

数据结构和类型

六种是 原型 的数据类型 以及 Object 对象

  1. Boolean. 布尔值,true 和 false.
  2. 一个表明 null 值的特殊关键字。 JavaScript 是大小写敏感的,因此 null 与 Null、NULL或其他变量完全不同。
  3. 变量未定义时的属性。
  4. Number. 表示数字,例如: 42 或者 3.14159。
  5. String. 表示字符串,例如:”Howdy”
  6. Symbol ( 在 ECMAScript 6 中新添加的类型).。一种数据类型,它的实例是唯一且不可改变的。

Objects 和 functions 是本语言的其他两个基本要素。你可以将对象视为存放值的命名容器,而将函数视为你的应用程序能够执行的过程(procedures)。

在涉及加法运算符(+)的数字和字符串表达式中,JavaScript 会把数字值转换为字符串。

x = "The answer is " + 42 // "The answer is 42"
y = 42 + " is the answer" // "42 is the answer"

在涉及其它运算符(译注:如下面的减号'-‘)时,JavaScript语言不会把数字变为字符串。例如(译注:第一例是数学运算,第二例是字符串运算):

"37" - 7 // 30
"37" + 7 // "377"

字符串转换为数字(converting strings to numbers)

parseInt()和parseFloat()

将字符串转换为数字的另一种方法是使用单目加法运算符。

"1.1" + "1.1" = "1.11.1"
(+"1.1") + (+"1.1") = 2.2  // 注:加入括号为清楚起见,不是必需的。

对象属性名字可以是任意字符串,包括空串。如果对象属性名字不是合法的javascript标识符,它必须用””包裹。属性的名字不合法,那么便不能用.访问属性值,而是通过类数组标记(“[]”)访问和赋值。

var unusualPropertyNames = {
 "": "An empty string",
 "!": "Bang!"
}
console.log(unusualPropertyNames."");  // 语法错误: Unexpected string
console.log(unusualPropertyNames[""]); // An empty string
console.log(unusualPropertyNames.!);  // 语法错误: Unexpected token !
console.log(unusualPropertyNames["!"]); // Bang!

注意:

var foo = {a: "alpha", 2: "two"};
console.log(foo.a);  // alpha
console.log(foo[2]);  // two
//console.log(foo.2); // Error: missing ) after argument list
//console.log(foo[a]); // Error: a is not defined
console.log(foo["a"]); // alpha
console.log(foo["2"]); // two

在ES2015,对象字面值扩展支持在创建时设置原型,简写foo:foo分配,定义方法,加工父函数(super calls),计算属性名(动态)。总之,这些也带来了对象字面值和类声明紧密联系起来,让基于对象的设计得益于一些同样的便利。

var obj = {
  // __proto__
  __proto__: theProtoObj,
  // Shorthand for ‘handler: handler'
  handler,
  // Methods
  toString() {
   // Super calls
   return "d " + super.toString();
  },
  // Computed (dynamic) property names
  [ 'prop_' + (() => 42)() ]: 42
};

能在JavaScript的字符串中使用的···特殊字符···

转义字符

// 引号转义
var quote = "He read /"The Cremation of Sam McGee/" by R.W. Service.";
// 转义反斜线
var home = "c://temp";
// 转义换行 一条语句拆成多行书写
var str = "this string /
is broken /
across multiple/
lines."
console.log(str);  // this string is broken across multiplelines.
// Javascript没有“heredoc”语法,但可以用行末的换行符转义和转义的换行来近似实现 
var poem = 
"Roses are red,/n/
Violets are blue./n/
I'm schizophrenic,/n/
And so am I."
Javascript 相关文章推荐
jQuery 使用手册(五)
Sep 23 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
Aug 29 Javascript
防止jQuery ajax Load使用缓存的方法小结
Feb 22 Javascript
javascript感应鼠标图片透明度显示的方法
Feb 24 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
May 09 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
Apr 28 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
May 27 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Dec 15 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
Dec 14 Javascript
Vue项目中跨域问题解决方案
Jun 05 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
Nov 07 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
Apr 09 Javascript
分享一个原生的JavaScript拖动方法
Sep 25 #Javascript
HTML中setCapture、releaseCapture 使用方法浅析
Sep 25 #Javascript
jQuery的deferred对象使用详解
Sep 25 #Javascript
简单谈谈Vue 模板各类数据绑定
Sep 25 #Javascript
D3.js实现直方图的方法详解
Sep 25 #Javascript
关于JS中二维数组的声明方法
Sep 24 #Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
Sep 24 #Javascript
You might like
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
PHP 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
php生成微信红包数组的方法
2019/09/05 PHP
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
python实现识别相似图片小结
2016/02/22 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
城市精细化管理实施方案
2014/03/04 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
民主评议党员工作总结
2014/10/20 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
道歉情书大全
2015/05/12 职场文书
党组织结对共建协议书
2016/03/23 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python