JavaScript基础回顾一(类型、值和变量)

请看代码并思考输出结果
var scope = 'global';
function f(){
console.log(scope);
var scope = 'local';
console.log(scope);
}
f(); var a = [];
console.log(a == ,a == false); var b = [];
console.log(b + ,b-); var c = {};
console.log(Boolean(c)==true);
对比答案

全部答对的同学,下文可不必阅读,我相信你的基础已经很扎实了^_^
没有答对也不要灰心,本文会巩固你的基础知识,后续会有系列的基础回顾知识,以飨诸君!
缘由
相信只要从事开发的同学,不论前端后端或多或少的使用过javascript这门语言。但对其深入理解的我相信并不在多数,我看过很多同学分享过的文章,说实话干货太少,自己的见解微乎其微,javascript基础知识也很少能看到有文章写到,万丈高楼始于平地,基础的重要性我一直认为不比前端框架低。主要来源于JS权威指南、网络资料以及自己的一些“偏见”。
数据类型
JavaScript两大类型:原始类型和对象类型
原始类型(primitive type)
null
undefined
string
number
boolean
五大原始类型:其中 null、undefined都是其类型的唯一成员,boolean成员只有true和false,number类型即为数值(js均以浮点型表示),string即为字符串类型(长度为16位),原始类型均为不可变类型,你无法改变数字1,也无法改变字符串h,更不可能将false改变成其它值,只有对象类型可变
对象类型(object type)
对象类型是属性的集合,大部分的对象都包含属性名、属性值(数组对象可以看成为从0开始的有序属性名),也就是名/值对,但函数是一个特殊的对象
常见的对象类型:
Array,Function,Math,Date,RegExp
类型转换
| 值 | 转换为字符串 | 数字 | 布尔值 | 对象 |
| undefined | "undefined" | NaN | false | throws TypeError |
| null | "null" | 0 | false | throws TypeError |
| true | "true" | 1 | new Boolean(true) | |
| false | "false" | 0 | new Boolean(false) | |
| "" | 0 | false | new String(“”) | |
| "1.1" | 1.1 | true | new String(“1.1”) | |
| "ccy" | NaN | true | new String(“ccy”) | |
| 0 | "0" | false | new Number(0) | |
| -0 | "0" | false | new Number(-0) | |
| NaN | "NaN" | false | new Number(NaN) | |
| Infinity | "Infinity " | true | new Number(Infinity) | |
| -Infinity | "-Infinity " | true | new Number(-Infinity) | |
| 1 | "1" | true | new Number(1) | |
| {} | 对象先转换原始值, 再有原始值进一步转化 |
同左 | true | |
| [] | 0 | true | ||
| [6] | "6" | 6 | true | |
| ['a'] | 使用join()方法 | NaN | true | |
| function(){} | "function(){}" | NaN | true |
JavaScript取值类型非常灵活,当期望使用一个布尔值时,你可以提供任意类型值,JavaScript会根据需要自行转换类型,字符串和数字也同样如此,原始类型的可通过对应的包装类转化成对象类型,具体转化请熟悉上表。理解类型转换,文章开头关于a,b,c的输出也就不在话下了。
变量声明
ES5时代JavaScript还不支持块级作用域,声明变量采用关键字var
如下所示:
var i;
var ccy,name;
var m = 0, k = 1,n = 'bar';
var声明的变量如果没有赋予初始值,则默认为undefined,变量可为任意数据类型。
变量作用域
一个变量的作用域是程序源代码中定义这个变量的区域。全局变量拥有全局作用于,在JavaScript中任何地方都是有定义的。然而在函数内声明的变量只有在该函数体内有效,也就是局部变量,函数参数也是局部变量。
学过Java的同学应该知道就近原则的说法,类变量与方法中的变量同名时在该方法或者构造函数体内类变量是会被其覆盖掉,JavaScript也遵循这一原则。
var关键字存在声明提前的bug,在非严格模式下不会报错。由此文章开头关于方法的输出等价于
function f(){
var scope;
console.log(scope);
var scope = 'local';
console.log(scope);
}
理解变量声明及作用域,文章开头的输出亦不在话下了。
作用域链
JavaScript是基于词法作用域的语言,全局变量在程序中始终有定义,局部变量在声明的函数题内以及其所嵌套的函数内始终是有定义的。
每段JavaScript代码都有一个与之关联的作用域链(scope chain),这个作用域链是一个对象列表或链表,这组对象定义了这段代码的“作用域中”的变量,当需要查找变量X的值时(变量解析),它会从链中的第一个对象开始查找,若有则直接使用,若没有则向上查找,以此类推,若作用域链不存在X则抛出ReferenceError异常。
希望本文能对您有所收获,祝好!
JavaScript基础回顾一(类型、值和变量)的更多相关文章
- Javascript基础回顾 之(一) 类型
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- Javascript基础回顾 之(三) 面向对象
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- Javascript基础回顾 之(二) 作用域
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- JavaScript 基础回顾——对象
JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...
- JavaScript 基础回顾——函数
在JavaScript中,函数也是一种数据类型,属于 function 类型,所以使用Function关键字标识函数名.函数可以在大括号内编写代码并且被调用,作为其他函数的参数或者对象的属性值. 1. ...
- 原生 javascript 基础回顾
(1)打开新窗口 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL:可选参数,在窗口中要显示网页的网址或路径.如果省略这个参数,或者它的值是空 字符串 ...
- JavaScript 基础回顾——数组
JavaScript是无类型语言,数组元素可以具有任意的数据类型,同一个数组的不同元素可以具有不同类型.数组的元素设置可以包含其他数组,便于模拟创建多维数组. 1.创建数组 在JavaScript中, ...
- Javascript基础系列之(二)变量
javascript 中变量通过var关键字(variable)来声明的. var school = "beijingyizhong" 也可以通过var 关键字给变量多个值. va ...
- javascript基础篇--function类型(上)
在js中,function类型实际上是对象,每一个函数都是function类型的一个实例.并且与其它引用类型一样具有属性和方法. 声明 1普通方式 Function sum(num1,num2) { ...
随机推荐
- HTML常用的特殊符号&前端使用的标点符号
不想在项目中使用图片, 还得切,如关闭按钮“×”.男女符号“♂♀”.对勾“√”等,找到了一篇全面的博客,转自https://www.haorooms.com/post/html_tsfh,感谢. 如下 ...
- [swarthmore cs75] Compiler 5 – Egg-eater
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第7次大作业. 抽象语法: 存储方式: 栈中的数据如果最后三位(tag bits)是001表示元 ...
- oracle RAC
RAC安装步骤 1 配置共享存储 2 Grid Infrastructure软件的安装,GI主要用于cluster ,storage的管理 3 安装数据库软件 ...
- ssh 使用 sed 替换的时候,替换的字符串有单双引号的时候怎么用
线上有一个脚本需要 ssh 登录远程机,然后完成特定文件中的某个值,替换的字符中有单引号,所以需要特定的写法,才能成功 1).ssh 远程执行命令,替换字符串中有单引号( ' ) ssh zhuzi@ ...
- [已解决]Cannot find one or more components.Please reinstall the application
Microsoft SQL Server Management Studio 17,一段时间未用出现Cannot find one or more components.Please reinstal ...
- chat.php
<!DOCTYPE html><html> <meta charset="UTF-8"> <title>web chat</t ...
- [转]深入理解 GRE tunnel
我以前写过一篇介绍 tunnel 的文章,只是做了大体的介绍.里面多数 tunnel 是很容易理解的,因为它们多是一对一的,换句话说,是直接从一端到另一端.比如 IPv6 over IPv4 的 tu ...
- 看CES 2017上有哪些好玩的物联网设备
2017年国际消费类电子产品展览会(CES)已于昨天在拉斯维加斯正式开幕,多款新一代智能手机和平板电脑亮相本届CES大展,智能家居.穿戴等设备更成为外界普遍关注的焦点.今天笔者将带大家一览CES 20 ...
- [转载]DevOps在传统企业的落地实践及案例分享
内容来源:2017年6月10日,优维科技高级解决方案架构师黄星玲在“DevOps&SRE 超越传统运维之道”进行<DevOps在传统企业的落地实践及案例分享>演讲分享.IT 大咖说 ...
- 浅析B/S架构数据库连接方式
前言 在许许多多的B/S架构系统中都涉及到了数据库的链接,那么对于数据库连接的方式有哪些?可能出现的问题是什么? 目录 1.普通连接方式 2.单例模式 3.连接池 分析 普通连接: 下面是我们 ...