学习JavaScript的数据类型
标签:
JavaScript
大纲
- 语法
- 命名规范
- 注释
- 严格模式
- 数据类型
- 类型转换
一、语法
变量区分大小写
//变量 Name 和 name 不冲突
var Name = "bob" ;
var name = "lynn";
二、命名规范
- 第一个字符必须是以字母、下划线(_)或美元符号($)开头
- 其他字符可以是字母、下划线、美元符号或数字。
- 建议变量驼峰式命名,常量为全大写,构造函数大写字母开头
- 起有意义的命名
// 变量
var userName = "bob";
// 函数
function getUserInfo() {}
// 构造函数
function Person() {}
三、注释
// 单行注释
/**
* 多行注释
* 多行注释
*/
四、严格模式
“严格模式”(strict mode),这种模式使得Javascript在更严格的条件下运行。
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
- 开启严格模式只需要在代码头部添加
"use strict"
即可。
// 全局开启严格模式
"use strict";
// 函数内开启严格模式
function createAnimal() {
"use strict";
}
注: IE6,7,8,9 均不支持严格模式。
五、关键字和保留字
第五版:
关键字 | 关键字 | 关键字 | 关键字 |
---|---|---|---|
class | enum | extends | super |
const | export | import | implements |
package | public | interface | private |
static | let | protected | yield |
六、数据类型
- 简单数据类型:
Undefined
,Null
,String
,Number
,Boolean
- 复杂数据类型:
Object
- ES6新增了一种数据类型:
Symbol
,表示独一无二的值,Symbol
最大的用途是用来定义对象的唯一属性名。
七、typeof操作符
typeof操作符检测变量返回的值:
- 如果值为未定义或初始化未赋值返回结果为:
"undefined"
- 如果值是布尔值返回结果为:
"boolean"
- 如果值是数值返回结果为:
"number"
- 如果值是字符串返回结果为:
"string"
- 如果值是null或对象返回结果为:
"object"
- 如果值为函数返回结果为:
"function"
- 如果值为Symbol()返回结果为:
"symbol"
八、undefined类型
- 只有一个值:
undefined
- 出现undefined的情况下情况为2种:
- 声明变量且未赋值
- 未声明的变量使用typeof操作符检测返回undefined
- undefined值是派生自null值的,
var name;
console.log(name); // undefined
console.log(typeof age); // 未声明的变量,使用typeof操作符检测返回undefined
// 建议声明变量同时初始化赋值,这样区分变量是否被声明过
// 建议声明变量最好同时确定该变量装的数据类型,赋值其对应的数据类型,目的为了代码的健壮性
console.log(undefined == null); // true
九、null类型
- 只有一个值:
null
typeof null
返回的结果是object
,因为null 是一个空对象的指针- 如果定义的变量将来用于保存对象,那么最好将该变量初始化为
null
而不是其他值。这样一来,只要检查null值就可以知道相应的变量是否已经保存了一个对象的引用
十、boolean类型
- 布尔类型只有2个值:true和false
各类型与布尔值的转换关系
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
boolean | true | false |
string | 任何非空的字符串 | “” 或 ‘’ (空字符串) |
number | 任何非零数值(包括无穷大) | 0 或 NaN |
Object | 任何对象 | null |
undefined | / | undefined |
十一、number类型
- 浮点数值
- 数值范围:
Number.MAX_VALUE
和Number.MIN_VALUE
- 检查数值是不是无穷大和无穷小:
isFinite( value )
是返回true 反之false
11.1.NaN
- 任何涉及NaN的操作都会返回NaN
- NaN与任何值都不相等,包括NaN本身
- isNaN检查参数是否:“不是数值”
console.log(isNaN(NaN)); // true
cobsole.log(isNaN(false)); // false
console.log(isNaN(10)); // false
11.2.数值转换
有三个函数可以把非数值转换为数值:Number(),parseInt(),parseFloat()
,第一个函数用于任何数据类型,另外2个函数专门用于把字符串转换成数值。
11.3.Number()函数转换规则
- 如果是boolean值,true和false分别被转换为1和0
- 如果是数值,只是简单的传入和返回
- 如果是null值,返回0
- 如果是undefined值,返回NaN
- 如果是字符串:
- 如果字符串只包含数字(正负值)会转换其对应的10进制值,忽略前面的0
- 如果字符串包含有效浮点格式,也转换为对应的浮点数值,忽略前面的0
- 如果字符串包含有效的十六进制格式,转换为相同大小的十进制数值
- 如果字符串是空的,转换为0
- 如果字符串包含除以上的格式之外的字符,转换为NaN
- 如果是对象,则会调用对象的valueOf方法,然后依照前面的规则转换返回值
- 如果对象结果为NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回字符串值。
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number(123)); // 123
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
// string
console.log(Number("0123")); // 123
console.log(Number("+456.789")); // 456.789
console.log(Number("0xf")); // 15
console.log(Number("")); // 0
console.log(Number("1234abc")); // NaN
// object
console.log(Number({})); // NaN
console.log(Number({num: 123})); // NaN
console.log(Number([1, 2, 3])); // NaN
// 如果修改对象的返回的值,需要修改valueOf和toString函数返回的值
// valueOf
let person1 = {};
person1.valueOf = function () {
return 123;
}
console.log(Number(person1)); // 123
// toString
let person2 = {}
person2.toString = function () {
return 456;
}
console.log(Number(person2)); // 456
11.4.parseInt()函数转换规则
- 首先会检查是否符合数值模式,忽略字符串前面的空格,直接找到第一个非空字格符;
- 如果第一个字符不是数字字符或者符号,返回NaN;
- 忽略最前面的零
- 如果第一个字符不是是数字字符,会继续解析第二个字符,直到解析完所有后续字符或者遇到一个非数字字符;
- 转换空字符串会转换为NaN
- 接收2个参数,第二个参数是指定进制转换
console.log(parseInt("123")); // 123
console.log(parseInt("0123")); // 123
console.log(parseInt("123.456")); // 123
console.log(parseInt("123.0")); // 123
console.log(parseInt("0.123")); // 0
console.log(parseInt("hello123")); // NaN
console.log(parseInt("123hello")); // 123
console.log(parseInt("")); // NaN
console.log(parseInt("070", 8)); // 56 转换8进制
console.log(parseInt("0xf", 16)); // 15 转换16进制
11.4.parseFloat()函数转换规则
- 从第一个字符(位置0)开头解析每个字符,一直解析到字符串的末尾,遇到一个无效浮点数字字符为止;
- 忽略最前面的零
- parseFloat()只解析十进制的值,解析十六进制的值始终返回0,没有第二个传入进制参数
- 如果小数点为0,返回整数
- 转换空字符串会转换为NaN
console.log(parseFloat("123")); // 123
console.log(parseFloat("0123")); // 123
console.log(parseFloat("123.456")); // 123.456
console.log(parseFloat("123.0")); // 123
console.log(parseFloat("0.123")); // 0.123
console.log(parseFloat("hello123")); // NaN
console.log(parseFloat("123hello")); // 123
console.log(parseFloat("")); // NaN
console.log(parseFloat("070")); // 70 // 忽视8进制,直接转换
console.log(parseFloat("0xf")); // 0 十六进制
十二、String类型
- 由0个或多个16位的Unicode字符组成的字符
- 字符串可以使用双引号 “hello” 或单引号 ‘world’ 表示
- 字符串符号要配对出现,比如双引号开头字符串必须要双引号,单引号开头必须单引号结尾
- 字符串字面量:\n 换行;\t 制表; \b 退格; \r 回车; /’ 单引号 /" 双引号
- 字符串特点:字符串是不可变的,字符串一旦创建,他们的值就不能变
- 要修改某个变量保存的字符串,首先需要销毁原来的字符串,再用另外一个包含新值的字符串填充该变量
var lang = "java";
lang = lang + "script";
12.1转换为字符串
- number,boolean,object,string都有toString()方法转换,但null和undefined没有这个方法
- null和undefined使用的是String()函数
toString()其转换规则:
// toString()
var num = 10;
console.log(num.toString()) // "10"
// toString() 可以接收一个转换进制参数
console.log(num.toString(2)) // "10"
console.log(num.toString(8)) // "12"
console.log(num.toString(10)) // "10"
console.log(num.toString(16)) // "a"
12.2 String()转换规则
- 如果有toString方法,则调用该方法(没有参数)并返回相对应的结果
- 如果是null,返回
"null"
- 如果是undefined,返回
"undefined"
console.log(String(10)); // "10";
console.log(String(true)); // "true";
console.log(String(null)); // "null";
console.log(String(undefined)); // "undefined";
十三、Object类型
- ECMAScript中对象就是一组数据和功能的集合。
创建对象的常见几种方法:
// 第一种:字面量
let obj1 = {name: 'bob'};
// 字面量创建对象实际上是new Object()的语法糖,简单来说:
// var obj1 = {} 实际是调用了: var obj1 = new Object();即
var obj2 = new Object({name: 'bob'});
// 第二种:构造函数
function Person(name){
this.name = name;
}
let person = new Person('bob');
// 第三种:Object.create()
// Object.create()方法创建一个新对象,
// 使用现有的对象来提供新创建的对象的__proto__
let obj3 = Object.create({name: 'bob'});
Object的每个实例都具有以下的属性和方法:
constructor
:保存着用于创建对象当前的函数hasOwnProperty(propertyName)
:用于检查给定的属性在当前对象实例中(而不是在实例原型中)存在,其参数的属性名字必须要字符串形式指定:o.hasOwnProperty("name")
isPrototypeOf(object)
:用于检查传入对象是否是当前对象的原型propertyIsEnumerable(propertyName)
:用于检查给定的属性是否能够适应for-in
语句来枚举toLocaleString()
:返回对象的字符串表示toString()
:返回对象的字符串表示valueOf()
:返回对象的字符串,数值或布尔值表示,通常与toSting()
方法返回值相同
继续学习对象可以继续看
Thanks!
点击查看更多内容
7人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦