需要牢记的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 相关文章推荐
从JavaScript 到 JQuery (1)学习小结
Feb 12 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
js变换显示图片的实例
Apr 16 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
javascript实现简单的全选和反选功能
Jan 05 Javascript
jquery遍历json对象集合详解
May 18 Javascript
Vue-cli创建项目从单页面到多页面的方法
Sep 20 Javascript
使用Angular CLI生成路由的方法
Mar 24 Javascript
JavaScript刷新页面的几种方法总结
Mar 28 Javascript
vue多个元素的样式选择器问题
Nov 29 Javascript
RxJS在TypeScript中的简单使用详解
Apr 13 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
分享一个原生的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
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
取键盘键位ASCII码的网页
2007/07/30 Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
发布你的Python模块详解
2016/09/15 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
Python urllib.request对象案例解析
2020/05/11 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
体育教师工作总结的自我评价
2013/10/10 职场文书
化验室技术员岗位职责
2013/12/24 职场文书
劳资专员岗位职责
2013/12/27 职场文书
承诺书的格式范文
2014/03/28 职场文书
专家推荐信模板
2014/05/09 职场文书
赔偿协议书范本
2014/09/12 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
中学教代会开幕词
2016/03/04 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL