为了账号安全,请及时绑定邮箱和手机立即绑定

学习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

六、数据类型

  • 简单数据类型:UndefinedNullStringNumberBoolean
  • 复杂数据类型: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_VALUENumber.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人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
4318
获赞与收藏
1744

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消