为什么80%的码农都做不了架构师?>>>   

var v1 = 123;    /* 声明变量、同时初始化为数字 */
var v2 = 'ABC';  /* 声明变量、同时初始化为字符串 */
var v3,v4;       /* 已声明还没有初始化的变量, 类型未知(未知也是一种类型: undefined) */x = 1; y = 2;    /* 缺失 var(未声明)的变量也可以使用, 但会让编译器在幕后补充声明; 最好别这样 */
alert(x + y);    /* 3 */

JavaScript 到底有几种数据类型? 不如从例子中去解析:


var X;                /* 先声明一个变量 X */
alert(typeof X);      /* 用 typeof 函数查看其类型是: undefined */X = 123;              /* 赋予数字值 */
alert(typeof X);      /* 此时的类型是: number */X = 'ABC';            /* 赋予字符串值 */
alert(typeof X);      /* 此时的类型是: string */X = true;             /* 赋予布尔值(true 或 false) */
alert(typeof X);      /* 此时的类型是: boolean */X = function(){};     /* 赋予一个函数 */
alert(typeof X);      /* 此时的类型是: function */X = new Array(1,2,3); /* 赋予一个数组 */
alert(typeof X);      /* 此时的类型是: object */X = new Date();       /* 赋予一个日期值 */
alert(typeof X);      /* 此时的类型是: object */X = new RegExp();     /* 赋予一个正则表达式对象 */
alert(typeof X);      /* 此时的类型是: object */X = new String();     /* 赋予一个字符串对象 */
alert(typeof X);      /* 此时的类型是: object */X = new Boolean();    /* 赋予一个布尔对象 */
alert(typeof X);      /* 此时的类型是: object */X = new Number();     /* 赋予一个数字对象 */
alert(typeof X);      /* 此时的类型是: object */X = new Error();      /* 赋予一个 Error 对象 */
alert(typeof X);      /* 此时的类型是: object */X = new Object();     /* 赋予一个 Object 对象 */
alert(typeof X);      /* 此时的类型是: object */

从例子中总结出 JavaScript 的数据类型:


undefined /* 没有赋值或不存在的变量的类型 */
number    /* 数字类型 */
string    /* 字符串类型 */
boolean   /* 布尔类型 */
function  /* 函数类型 */
object    /* 对象类型, 其中数组等都属于 object 类型 */

可以从实践中求证一下:


alert(typeof window);                            /* object */
alert(typeof window.screen);                     /* object */
alert(typeof window.closed);                     /* boolean */
alert(typeof window.document);                   /* object */
alert(typeof window.document.body);              /* object */
alert(typeof window.document.body.offsetWidth);  /* number */
alert(typeof window.document.body.clientHeight); /* number */
alert(typeof window.document.title);             /* string */
alert(typeof window.document.Title);             /* undefined *//* 上面最后一个是 undefined, 这表示对象或属性不存在;
因为 JS 区分大小写, document 对象不包含 Title 对象或属性, document 的标题属性应该是 title */

从前面看到:
既有一个 string 类型, 又有一个 String 对象;
既有一个 number 类型, 又有一个 Number 对象;
既有一个 boolean 类型, 又有一个 Bollean 对象...

这是 JS 为了简单而带来的麻烦, 其实不用考虑那么多, 可以把 string 与 String 混起来使用, JS 编译器会在幕后处理一切; 譬如:


var X = new String('ABC');  /* 此时 X 是 String 对象 */
var Y = new String('123');  /* 此时 Y 是 String 对象 */
var XY = X + Y;             /* 此时 XY 是 string 类型 */
alert(XY);                  /* ABC123 */
alert(XY.length);           /* 6 */var X = 'ABC';              /* 此时 X 是 string 类型 */
var Y = '123';              /* 此时 Y 是 string 类型 */
var XY = new String(X + Y); /* 此时 XY 是 String 对象 */
alert(XY);                  /* ABC123 */
alert(XY.length);           /* 6 *//* 上面的字符串长度属性(length) 本来是属于 String 对象的, string 类型的字符串照样使用;
这有可能是编译器迅速做了个转换; 在 JS 中任何类型的转换都是方便自由的. */

说到 JavaScript 类型的简单化, 它的数值类型只有一个 number(类似与 Delphi 的 Double);
也没有单个字符类型, 需要时给长度是 1 的字符串就是了.

和 Delphi 的指针类似, 可以给 JS 的变量赋空值: null; 这个 null 和上面的 undefined 不好区别.
null 是已赋值, 但是空值;
undefined 是没赋值或不存在.


alert(undefined == null);  /* true ; 简单地看, 它们差不多 */
alert(undefined === null); /* false ; 仔细地看, 它们不一样 *//* null 作为空值(相当与 0)可以参与数值运算 */
var X;
X = 123 + null;      alert(X); /* 123 */
X = 123 + undefined; alert(X); /* NaN *///JS 的理念应该是这样的:
//未知类型也是类型, 没有赋值也是值: undefined;
//空值也是值: null.

再展示一个遭遇 null 和 undefined 的示例:



还有一个 "常量" 的问题.
JS 本来没有常量, 所谓的常量不过是提前赋值的变量而已.


Infinity;                  /* 无穷大 */
NaN;                       /* 非数字值 */
Number.MAX_VALUE;          /* 最大数值(JS 可以表示的) */
Number.MIN_VALUE;          /* 最小数值(JS 可以表示的) */
Number.NaN;                /* 非数字值 */
Number.NEGATIVE_INFINITY;  /* 负无穷大 */
Number.POSITIVE_INFINITY;  /* 无穷大 *//* 取值测试: */
alert(Number.MAX_VALUE);         /* 1.7976931348623157e+308 */
alert(Number.MIN_VALUE);         /* 5e-324 */
alert(Number.NaN);               /* NaN */
alert(Number.NEGATIVE_INFINITY); /* -Infinity */
alert(Number.POSITIVE_INFINITY); /* Infinity */
alert(Infinity);                 /* Infinity */
alert(NaN);                      /* NaN *//* 常量还有其它, 譬如(IE7): */
alert(window.navigator.appCodeName); /* Mozilla - 浏览器代码*/
alert(window.navigator.appName);     /* Microsoft Internet Explorer - 浏览器名称 */
alert(window.navigator.appVersion);  /* 4.0 ... - 浏览器版本 */

另外, 浏览器中 JS 的全局变量都直属浏览器的 window 对象, 尽管常常省略这个前缀:


var X = 111;
alert(window.X); /* 111 */window.Y = 222;
alert(Y);        /* 222 */function MyFun(x, y) {return x + y;
}
alert(MyFun(1, 2));        /* 3 */
alert(window.MyFun(1, 2)); /* 3 */

转载于:https://my.oschina.net/hermer/blog/320652

理顺 JavaScript (4) - 变量、常量与数据类型相关推荐

  1. Javascript - 1 引入方式,变量常量,数据类型,运算符,流程控制,数组,函数,对象,DOM

    Javascipt:是一门弱类型的脚本语言,需要在网页上执行. html负责框架结构,css负责样式修饰,js负责行为交互,动态效果. 前端三大件:html,css,js. javascript 和 ...

  2. java的注释、关键字、标识符、变量常量、数据类型、运算符、流程控制等

    java的注释.关键字.标识符.变量常量.                             数据类型.运算符.流程控制等 1. java概述 1.1 java的技术体系 Java SE:是Ja ...

  3. C#学习笔记(一)变量 常量 基本数据类型 其它

    http://www.enet.com.cn/eschool/video/c_peng/ 单行注释多行注释 /* .... //*/ 第三节 变量 类型:从内存中开辟空间 而变量则是存储在空间内 in ...

  4. Scala语法(一) 基础语法(变量常量判断循环数组集合)

    前言 在前面的章节中, 我们介绍了如何在Eclipse内安装Scala环境. 本章开始, 我们将讲解下Scala的基本语法. PS: 1. 个人虽然没有想转Scala语言开发的思想, 但是近来Scal ...

  5. php变量名当文件命_php基础教程 第二步 通俗易懂的学习变量、常量与数据类型...

    简介 变量.常量以及数据类型 在编程中,变量指一个存储值的一个盒子,或者说容器.例如一个箱子,用来放杂物,这个箱子就是一个容器,值就为杂物.容器可以分为很多类型,例如瓶子.被子.盒子等.值也有很多类型 ...

  6. Java01-day01【发展史、跨平台原理、JRE和JDK、常用DOS命令、关键字、常量、数据类型、变量使用的注意事项、标识符、类型转换】

    java零基础入门到精通(2019版)[黑马程序员] 视频+资料:[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] &qu ...

  7. JavaScript——变量与基本数据类型

    前言 JavaScript中的变量为松散类型,所谓松散类型就是指当一个变量被申明出来就可以保存任意类型的值,就是不像SQL一样申明某个键值为int就只能保存整型数值,申明varchar只能保存字符串. ...

  8. php基础教程 第二步 通俗易懂的学习变量、常量与数据类型

    简介 变量.常量以及数据类型 在编程中,变量指一个存储值的一个盒子,或者说容器.例如一个箱子,用来放杂物,这个箱子就是一个容器,值就为杂物.容器可以分为很多类型,例如瓶子.被子.盒子等.值也有很多类型 ...

  9. Java语法——标识符,关键字,数据类型,变量常量介绍

    Java语法 一标识符 定义:对各种变量,类,方法等进行命名的字符序列都被称为标识符.(凡是可以自己命名的变量等都是标识符.) 规则:(1)字母.数字.$.下划线组成 (2)数字不能出现在开头 (3) ...

最新文章

  1. 畸变的单目摄像机标定
  2. ICCV 2021 | 国科大提出首个CNN和Transformer双体主干网络!Conformer准确率高达84.1%!...
  3. Fedora 30可能默认启用DNF的best模式
  4. wxWidgets:添加状态栏
  5. 在WebIDE里导入SAP Fiori应用
  6. Linux 命令[2]:mkdir
  7. 快速切換手機版網頁語法
  8. Sprint Boot————@Qualifier、@Primary
  9. 【elasticsearch】ES 单分片使用 From/Size 分页遇到重复数据
  10. 自旋锁:pthread_spinlock_t,互斥锁:pthread_mutex_t,条件变量:pthread_cond_t,读写锁:pthread_rwlock_t
  11. extJS4.2.0 Json数据解析,嵌套及非嵌套(二)
  12. c语言单片机当型编程,手把手教你学单片机的C语言程序设计(十四).pdf
  13. 2014年视频聊天室开发经验分享
  14. 基于ASP.NET的网络购物系统设计与实现
  15. wps word设置多级标题及对应目录
  16. 计算机分区无法删除,电脑硬盘分区无法修改的解决方法分析
  17. 全球最专业的技术媒体,如何复盘 2019 AI 的发展?
  18. D3D管线以及着色器工作原理-画一个三角形
  19. YOLOV5的数据处理 增强技术
  20. 删除在Godaddy注册的域名,申请退款的全过程

热门文章

  1. FPM傅里叶叠层衍射成像笔记
  2. mysql 导出中文乱码_sqoop导出到mysql中文乱码问题总结、utf8、gbk
  3. dev里timeedit控件如何赋值_抽奖程序里的字节跳动模式和时长控制,让抽奖更有仪式感!...
  4. win11什么时候发布的_2021年初级会计师考试大纲什么时候发布?
  5. php 发送带附件的邮件,php发送带附件的电子邮件
  6. php获得帮助类数据_PHP实现的一个时间帮助类
  7. 使用ansible来调度cron作业
  8. 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...
  9. (转)Linux(Centos)之安装Java JDK及注意事项
  10. 缓存(CDN缓存,浏览器(客户端)缓存)