数值类型:number
JavaScript 没有整型和浮点型,只有一种数字类型,即number类型。
var x = 10;var y = 3.14;console.log(x,typeof x); // 10 "number"console.log(y,typeof y); // 3.14 "number"
注意:在JavaScript中,只要是数,就是数值型(number)的。无论整浮、浮点数(即小数)、无论大小、无论正负,都是number类型的。
字符串类型:string
字符串创建(两种方式)
- 变量 = “字符串”
- 字串对象名称 = new String (字符串)
单引号 双引号均可
var str1="hello world";var str1= new String("hello word");

// 字符串对象的操作var str = "hello"; // 这就是字符串对象console.log(str);// 字符串对象内置属性// length 计算字符串的长度console.log( str.length );// 字符串对象内置方法// toUpperCase(); 字母大写转换// toLowerCase(); 字母小写转换console.log( str.toUpperCase() );console.log( str.toLowerCase() );// indexOf 获取指定字符在字符串中第一次出现的索引位置// 字符串也有下标,也可以使用中括号来提取字符串的指定字符console.log(str[1]); // econsole.log( str.indexOf("e") ); // 1// 切片,当前方法支持使用负数代表倒数下标// slice(开始下标) 从开始位置切到最后// slice(开始下标,结束下标) 从开始下标切到指定位置之前var str = "helloworld";var ret = str.slice(3,6); // 开区间,不包含结束下标的内容console.log(ret); // lowvar ret = str.slice(5);console.log(ret); // worldvar ret = str.slice(2,-1);console.log(ret); // lloworlvar ret = str.slice(-4,-1);console.log(ret); // orlvar ret = str.slice(-1,-4);console.log(ret); // orl// split 正则分割,经常用于把字符串转换成数组var str = "广东-深圳-南山";var ret = str.split("-");console.log( ret );// substr 截取var str = "hello world";var ret = str.substr(0,3);console.log(ret); // hel// trim 移除字符串首尾空白var password = " ge llo ";var ret = password.trim();console.log(password.length); // 13console.log(ret.length); // 6
连字符和+号的区别
键盘上的+可能是连字符,也可能是数字的加号。如下:
console.log("我" + "爱" + "你"); //连字符,把三个独立的汉字,连接在一起了console.log("我+爱+你"); //原样输出console.log(1+2+3); //输出6
总结:如果加号两边都是数值,此时是加。否则,就是连字符(用来连接字符串)。
布尔类型:boolean
console.log(true);console.log(false);console.log(typeof true);console.log(true === 1);console.log(true == 1);console.log(true + 1);console.log(false + 1);
空值(Undefined和Null)
空对象:null
变量已定义,没有赋值
var c1 = null; //空对象. objectconsole.log(typeof c1);
未定义:undefined
var d1;//表示变量未定义console.log(typeof d1);
- undefined类型
undefined类型只有一个值,即 undefined。
(1)当声明的变量未初始化时,该变量的默认值是 undefined。
(2)当函数无明确返回值时,返回的也是值 undefined;
- null类型
另一种只有一个值的类型是 null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。
类型转换
js中,类型转换有2种:一种就是强制转换,一种就是自动转换。
因为js是一门弱类型的脚本语言,所以变量会在运算符的运行要求,有时候根据运算符的要求,进行自动转换的.
强制转换
// 1. 转换数据为数值类型// parseInt 把数据转换成整数// parseFloat 把数据转换成小数// Number 把数据转换成数值var box1 = "一共100件"; // 转换会失败var box1 = "100件"; // 转换会成功var ret = parseInt(box1);console.log(box1);console.log(ret);//var box2 = "3.14";console.log(parseFloat(box2) ); // 3.14//var box3 = "3.14"; // 使用Number转换的数据里面必须是纯数字!!!!否则都会转换失败// var box3 = "3.1.4"; // 转换失败!console.log( Number(box3) );// 对于转换数值,如果转换失败的话,则结果为 NaN ,是 Not a Number ,但是NaN的类型也是number类型// 2. 转换数据为字符串// 变量.toString()// String(数据)var box4 = 3.14;var ret = box4.toString();console.log(ret);//ret = String(box4);console.log(ret);// 3. 转换数据成布尔类型// Boolean()var box5 = "";console.log( Boolean(box5) ); // falsevar box6 = -1;console.log( Boolean(box6) ); // truevar box7 = 0;console.log( Boolean(box7) ); // false;var box8 = "false";console.log( Boolean(box8) ); // truevar box9 = [];console.log( Boolean(box9) ); // truevar box10 = {};console.log( Boolean(box10) ); // truevar box11 = "0";console.log( Boolean(box11) ); // truevar box12 = null;console.log( Boolean(box12) ); // falsevar box13 = undefined;console.log( Boolean(box13) ); // false
自动转换
// 所谓的自动转换,其实弱类型中的变量会根据当前代码的需要,进行类型的自动隐式转化var box1 = 1 + true;// true 转换成数值,是1, false转换成数值,是0console.log(box1); // 2var box2 = 1 + "200";console.log(box2); // 1200 原因是,程序中+的含义有2种,第一: 两边数值相加, 第二: 两边字符串拼接.但是在js中运算符的优先级中, 字符串拼接的优先级要高于数值的加减乘除,所以解析器优先使用了+号作为了字符串的拼接符号了,因为程序就需要+号两边都是字符串才能完成运算操作,因此1变成字符串最终的结果就是 "1" +"200"var box3 = 1 - "200";console.log(box3); // -199;因为-号中表示的就是左边的数值减去右边的数值,因此程序就会要求"200"是数值,因此内部偷偷的转换了一下
堆栈
根据数据类型不同,有的变量储存在栈中,有的储存在堆中。具体区别如下: 原始变量及他们的值储存在栈中,当把一个原始变量传递给另一个原始变量时,是把一个栈房间的东西复制到另一个栈房间,且这两个原始变量互不影响。
引用值是把 引用变量的名称储存在栈中,但是把其实际对象储存在堆中,且存在一个指针由变量名指向储存在堆中的实际对象,当把引用对象传递给另一个变量时,复制的其实是指向实际对象的指针, 此时 两者指向的 是同一个数据,若通过方法改变其中一个变量的值,则访问另一个变量时,其值也会随之加以改变;但若不是通过方法 而是通过 重新赋值 此时 相当于 重新开了一个房间 该值的原指针改变 ,则另外一个 值不会随他的改变而改变。
// 初始值类型var a = "yuan";var b = a;a = "alvin";console.log(a);//alvinconsole.log(b);//yuan// 对象类型var arr1=[1,2];arr2 = arr1;arr1.push(3);console.log(arr1)// [1,2,3]console.log(arr2);//[1,2,3]arr1=[4,5];console.log(arr1);//[4,5]console.log(arr2);//[1,2,3]
