变量声明

JavaScript的变量声明分为显式声明跟隐式声明。

显式声明

即带var关键字声明,例如

var example = example;

要注意JavaScript里面声明的关键字只有function和var两个,不要和C之类的int、float等弄混了。

我们也可以暂时不初始化,和下面这句是等价的:

var example;
example = "example";

如果我们没初始化的话,变量将是undefined。但不建议不初始化,而是根据变量的用途来初始化,例如若变量为字符串,则赋值为空字符串,如果是数字,则赋值为0等等。

我们也可以批量声明:
var variable1 = 1,
variable2 = 2,
variable3 = 3;

注意若是批量声明的话除了最后一个声明后面是分号其他的都是逗号,否则后面的变量会变成隐式声明变量。
用function关键字声明也属于显式声明,下面两句是等价的

function func() {}
var func = function() {}

隐式声明

隐式声明则是不带var关键字,例如我们直接:
example = "example";

这样也是合法的,那么两者有什么区别呢?

区别在于,显式声明的变量,是局部变量,而隐式声明的变量,是全局变量。
所以,我们要尽量避免隐式声明变量,避免全局变量的污染。

变量类型

前面说过JavaScript没有C的int、float等关键字,那么,JavaScript变量有没有类型呢?

废话,前面都说了,若变量为字符串,则初始化为空字符串等等,那就肯定有类型了。JavaScript共有6种基本变量

  • 未定义  undefined
  • 字符串   string
  • 数值  number
  • 布尔值  boolean
  • 函数  function
  • 对象  object

其中,前四种是值类型,后两种是引用类型,引用类型可以参照C里面的指针(但实际上JavaScript是没有指针的)

判断变量是什么类型,我们可以用typeof操作符来判断
typeof(1234); // number

undefined类型

主要在以下情况出现

  • 显式声明了但未初始化的变量
  • 未声明直接引用的变量
  • 直接初始化为undefined的变量
  • 函数声明提升

后面的函数声明提升涉及JavaScript的解析原理,这里先不讲,以后有机会再讲

 

string类型

这个比较好理解,就是字符串,如果学过C++的话就相当于String。不同的是,JavaScript是不区分单字符跟字符串的,也就是说,一个字符就是长度为1的字符串。在JavaScript中,单双引号功能一样,可以嵌套,一般用于字符串中有字符串的情况(在C++中遇到这种情况一般需要转义双引号)
字符串类型变量的声明,可以用字面量,也可以用String的构造函数来构造
var str = "1234";               // str = "1234"
var str = new String(); // str = ""
var str = new String("1234"); // str = "1234"

如果String构造函数不传参数,则默认为空字符串。

string类型变量可以使用各种字符串操作函数,例如最常用的
var str = new String("1234");
console.log(str.length); // 4
"1234".length; // 4

所有对象(除undefined和null外)都有toString方法,传入String构造函数的任意类型数据都会被转换为字符串,包括undefined和null

var str = new String(1234);         // str = "1234"
var str = new String(undefined); // str = "undefined"
var str = new String(null); // str = "null"

number类型

这个类型,相当于C里的int,long int,long long int,short,float,double等等的集合体,用一句话说就是只要是数,不管是小数整数,不管是正数负数,都属于number类型。
当然,number也有上界跟下界,不过很大,在实际情况中基本不会触及这个边界,所以在这里就不提及了。
number类型也是有区分整型跟浮点型的,但没有相应的关键字。
和string类似,声明一个number类型的变量,可以用字面量,也可以用Number构造函数
var num = 1234;                     // num = 1234
var num = new Number(undefined); // num = 1234

和字符串类似,如果我们传入构造函数的是其他类型的呢?

从其他类型转换为number类型,可以使用parseInt和parseFloat方法,前者转换为整型,后者转换为浮点型,例如
var num = parseInt("1234");     // num = 1234

如果被转化的对象里含有非数字字符,那么就会返回NaN(not a number),NaN表示应该返回number类型结果却没有

var num = parseInt("ab1234");     // num = NaN

boolean 类型

C中没有bool类型,但C++中是有bool类型的,可以参照下。
boolean类型只有两个值,true和false
其他类型和boolean的转换规则如下:
  • number转Boolean:0为false,其他为true
  • string转Boolean:空串为false,其他为true
  • undefined转Boolean:永远为false
  • object转Boolean:空对象为false,其他为true
  • function转Boolean:永远为true

function类型

function和之前三种类型有所不同,function本身是一个在用的关键字。前面说过,JavaScript的声明的关键字有两个,一个是var,一个就是function
若用function关键字来声明,声明的变量名即为指向该函数的”指针“(注意,不是真的指针),且效果实际上可以用var声明来代替
function func(param1, param2) {
    return param1 + param2;
}
var func = function(param1, param2) {
    return param1 + param2;
}
var func = new Function("param1", "param2", "return param1 + param2");

这三者在绝大多数情况下是等价的。之所以说绝大部分,是因为在函数声明提升中会有所不同,这里也不涉及。

其他类型是无法转换为引用类型的,所以string类型等等是无法转换为function类型的
 

object类型

这里的object是狭义的。广义上说,JS中一切皆对象,JavaScript的所有变量类型,都是从object引申出去的。我们先不讨论这么高深的问题,先讨论狭义上的object。
object类型的声明同样分为字面量和构造函数实例化
var obj = new Object();
var obj = {};

object类型变量可以使用object方法,object类型有prototype属性(JavaScript继承的基础)

同样的,其他类型无法转换为object类型

JavaScript快速入门(二)——JavaScript变量的更多相关文章

  1. JavaScript快速入门(四)——JavaScript函数

    函数声明 之前说的三种函数声明中(参见JavaScript快速入门(二)——JavaScript变量),使用Function构造函数的声明方法比较少见,我们暂时不提.function func() { ...

  2. Web开发初探之JavaScript 快速入门

    本文改编和学习自 A JavaScript Primer For Meteor 和 MDN Web教程 前文 Web开发初探 概述 本文以介绍 JavaScript 为主,初学者掌握本文的内容后,将能 ...

  3. JavaScript快速入门-ECMAScript基础语法

    一.JavaScript引入方式 1.行内式 <script> alert(123); </script> 2.外链式 <script src='custom.js'&g ...

  4. JavaScript快速入门-ECMAScript函数

    JavaScript函数(定义.参数.返回值.闭包.匿名函数) 一.函数定义 function functionName(arg0, arg1, ... argN) { statements } 函数 ...

  5. javascript快速入门2--变量,小学生数学与简单的交互

    变量 对于变量的理解:变量是数据的代号.如同人的名字一样. var num;//在JavaScript中使用关键字var声明一个变量 在JavaScript中,使用上面的语法,就可以声明一个变量,以便 ...

  6. JavaScript快速入门(一)——JavaScript概览

    JavaScript是什么? JavaScript的诞生 在1995年前后,当时世界上的主流带宽为28.8Kbps,现在世界平均下载带宽为21.9Mbps(数据来源于http://www.netind ...

  7. javascript快速入门1--JavaScript前世今生,HelloWorld与开发环境

    JavaScript历史 大概在1992年,一家称作Nombas的公司开始开发一种叫做C--(C-minus-minus,简称Cmm)的嵌入式脚本语言. Cmm背后的理念很简单:一个足够强大可以替代宏 ...

  8. javascript快速入门22--Ajax简介

    Ajax是什么? 首先,Ajax是什么?一个很酷的新兴词汇!仅仅是某种早就有了的技术的一种新说法而已! Ajax是指一种创建交互式网页应用的网页开发技术.要谈到网页应用程序,则必须从WEB的历史来讲: ...

  9. python3.5+django2.0快速入门(二)

    昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...

随机推荐

  1. Gauss elimination Template

    Gauss elimination : #include <iostream> #include <cstdlib> #include <cstring> #inc ...

  2. Core dotnet 命令大全

    Core dotnet 命令大全 dotnet 命令大全,让你理解dotnet 命令. 本文将以一个实例串起 dotnet 所有命令,让你玩转dotnet 命令. 本篇文章编写环境为windows 1 ...

  3. 多玩YY聊天记录解析全过程

    再来一发,现在开始! 下载安装YY,观察YY目录,很明显的发现了sqlite3.dll,这个数据库很多很多很多软件都在用,简单小巧且开源.删除sqlite3.dll 进入YY,历史记录不能正常显示,基 ...

  4. jquery 单击li防止重复加载的实现代码

    因为加载内容比较慢,所以用户可能在li上不经意点击了两次,那么就会请求两次,这是我们不想看到的. 今天在javascript-jquery群上一筒子发了两个demo给我,他的方法是先将单击的li节点拷 ...

  5. ubuntu rpm 包安装使用

    ubuntu安装rpm的方法RED HAT系列用rpm包安装软件,Debian系列得用deb包.毕竟red hat历史悠久,有很多rpm软件包还未对应deb格式.(对应的地方现在是越来越多)在网上找了 ...

  6. 基于visual Studio2013解决算法导论之024双向链表实现

     题目 双向链表的实现 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #i ...

  7. iOS开发之自己封装一个progressHUD控件

    看了几个轻量级的progress view 我觉得KVNProgress做的最漂亮吧 突然我想为什么我自己不封装一个控件 然后我研究了一下KVNProgress KVN简单的界面是由storyboar ...

  8. NOI2007 生成树计数

    题目 首先我要吐槽,这题目就是坑,给那么多无用的信息,我还以为要根据提示才能做出来呢! 算法1 暴力,傻傻地跟着提示,纯暴力\(40\)分,高斯消元\(60\)分. 算法2 DP!一个显然的东西是,这 ...

  9. ios网络学习------1get post异步请求

    网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark ...

  10. Cloud Foundry 中国群英会【上海站、成都站】资料宣传

    关注云计算和PaaS层的童鞋可以了解下: http://www.cloudfoundry-heroes-summit.com/shanghai http://www.cloudfoundry-hero ...