• JavaScript快速入门笔记(2):数据类型


    本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。转载请注明出处:https://www.cnblogs.com/itwhite/p/12217746.html

    数据类型分类

    JavaScript 的数据类型(按存储类型)分为:原始类型(primitive type)和对象类型(object type,也称为“引用类型” reference type)。

    • 原始类型:数字、字符串、布尔值、null、undefined
    • 对象类型:数组、函数、对象
    数据描述示例typeof()返回值
     数字  包括整数和浮点数  123, 3.14  number
     字符串  使用双引号或单引号包围的字符串  'foo', "bar"  string
     布尔值  true 或 false,以及条件表达式的值  true, false  boolean
     undefined  未初始化的变量的默认值  var u;  undefined
     null  空对象(可以类比为C/C++中的空指针)  var n = null;   object
     数组  一组有序的数据集合  var a = [1, "foo", null];  object
     Object  一组属性的集合  var o = { age: 23 };  object
     函数  函数本身也可以作为一个值  var f = function(){};  function

     除了按存储类型的分类方式,还可按其它方式进行分类,例如:

    注:上图源自 https://juejin.im/post/5b2b0a6051882574de4f3d96

    数字

    基本数字运算包括:加、减、乘、除、取余。

    复杂的数字运算需要通过 Math 对象的方法来完成,例如:

    Math.pow(2, 7)      // 求 2 的 7 次方
    Math.round(3.7)     // 四舍五入取整
    Math.ceil(3.2)      // 向上取整
    Math.floor(3.2)     // 向下取整
    Math.abs(-5)        // 求绝对值
    Math.max(1, 2, 3)   // 求最大值
    Math.min(1, 2, 3)   // 求最小值
    Math.random()       // 生成一个伪随机数(大于或等于0,小于1)

    关于数字的进制间转换和精度控制,请参看“类型转换”一节。 

    字符串

    字符串操作示例:

    操作示例(假设s是个字符串)
    求长度 s.length
    遍历字符

    for (var i = 0; i < s.length; i++) {
        console.log(s.charAt(i));
        console.log(s[i]); // IE7及以下不支持
    }

    字符串相加  s1 + s2 (注:123 + "456" == "123456")
    字符串比较 s1 == s2, s1 != s2
    字符串查找

    s.indexOf("ab")
    s.lastIndexOf("ab")
    s.search(/a.b/i)(参数可以是字符串,也可以是正则式)

    字符串替换 s.replace(/abc/, "ABC")(返回替换后的新字符串)
    字符串切割 s.split(/,s*/)(返回一个数组)
    大小写转换 s.toLowerCase(), s.toUpperCase()(返回转换后的新字符串)

    布尔值

    布尔值只有两个:true 和 false ,常用于条件判断。

    JavaScript 中,任何值都可以转换为布尔值,下面这些值会转换为 false:

    • undefined
    • null
    • 0
    • NaN
    • ""(空字符串)

    所有其它值都会被转换为 true 。

    null与undefined的区别

    未初始化的变量,其默认值便是 undefined。

    数组

    基本数组操作:

    操作示例
    获取数组长度 a.length
    读取下标为 i 的数组元素值 a[i]
    修改下标为 i 的数组元素的值 a[i] = x
    在数组尾部追加一个元素 a.push(x) 或 a[a.length] = x
    删除数组尾部最后一个元素 a.pop()
    在数组头部插入一个元素 a.unshift(x)
    删除数组头部第一个元素 a.shift()
    转换为字符串 a.toString() 或 a.join(', ')
    判断某个值是否是数组 Array.isArray(a) 或 a instanceof Array
    数组排序(默认按字符串排序) a.sort() 或 a.sort(function(a,b){return a - b})
    数组反转 a.reverse()

    遍历数组元素的方法有很多种,示例代码如下:

    var names = [ "Jack", "Bob", "Linda", "Smith" ];
    // 方法一: 使用 for 语句
    for (var i = 0; i < names.length; i++) {
        console.log(names[i]);
    }
    // 方法二: 使用 for-in 语句
    for (var i in names) {
        console.log(names[i]);
    }
    // 方法三: 使用 forEach() 方法
    names.forEach(function(name){
        console.log(name);
    });
    // 方法四: 使用 ES6 提供的 for-of 语句
    for (let name of names) {
        console.log(name);
    }
    View Code

    其它一些数组方法:

    • indexOf():查找某个元素的下标值,若不存在返回-1
    • lastIndexOf():反向查找某个元素的下标值,若不存在返回-1
    • forEach():常用于遍历数组
    • map():常用于根据某个数组的元素内容创建一个新数组,返回一个新数组
    • filter():常用于过滤数组元素,返回一个新数组
    • slice():常用于截取数组中连续的一段元素集合,详见:Array.prototype.slice()
    • splice() :常用于删除、替换、插入多个元素等,详见:Array.prototype.splice()
    • every():常用于判断是否每个元素都满足某个条件
    • some():常用于判断是否数组中有某个(或某些)元素满足某个条件

    Object

    JavaScript 中 Object 与其他语言中的“Map”、“Hash”、“字典”等概念类似,可以包含一组“键/值”对,例如:

     1 var person = { name: 'Bob', gender: 'male', age: 23 };
     2 console.log(person.name);    // Bob ,访问 name 属性值
     3 console.log(person['name']); // Bob ,另一种访问属性值的方式
     4 
     5 person.name = 'Jack';        // 修改属性值
     6 
     7 delete person.gender;        // 删除属性,删除后,gender 属性便不存在
     8 
     9 for (var x in person) {      // 遍历 Object 的键值对
    10     console.log(x);          // 键(key)
    11     console.log(person[x]);  // 值(value)
    12 }

    包装对象

    前面关于字符串的操作中,我们使用了字符串的属性length和相关方法,但根据前面的数据类型分类,字符串属于非对象类型,那为什么它会有属性和方法呢?

    这是因为 JavaScript 会对字符串、数字、布尔值这类型的数据进行重新包装,例如:当用户使用 "abc".length 时,JavaScript 解释器会将 "abc" 转换(通过 new String("abc")  的方式)成 String 对象,这样便可以使用其属性和方法。

    这里生成的临时 String 对象便称为“包装对象”,除了 String 对象,还有 Number 和 Boolean,它们分别用以包装数字和布尔值。

    null 和 undefined 没有对应的包装对象,所以没有属性和方法,属于不拥有方法的数据类型。

    类型转换

    在表达式中,JavaScript 会根据需要自动进行类型转换(隐式类型转换),例如:

    123 + "go!"   // => "123go!",123 会转换为字符串
    123 + "456"   // => "123456", 123 会转换为字符串
    123 * "2"     // => 246, "2" 会转换为数字

    需要注意的是:null转换为数字时结果是0,undefined转换为数字时结果是NaN。

    另外,我们还可以进行显式类型转换,方法是使用Boolean()、Number()、String()、Object()转换函数(当不通过 new 来调用这些函数时,它们并不会创建对象,而是仅作转换函数用),例如:

    Number("123")   // => 123, typeof(Number("123")) == "number", typeof(new Number("123")) == "object"
    // 另外,还可以使用全局函数 parseInt()或 parseFloat()来解析数字,parseInt()允许包含数字前缀(例如:"0x")或者指定数字基数,
    // parseInt("0x7b") 与 parseInt("7b", 16) 结果一致
    String(false)   // => "false",或者使用 false.toString()的到的结果也相同
    Boolean([])     // => true
    Object(123)     // => new Number(123)

    对于数字进制转换可以使用Number类的toString()方法(它允许指定一个转换基数),例如:

    var n = 123;
    alert(n.toString(2));   // => 1111011
    alert(n.toString(8));   // => 173
    alert(n.toString(16));  // => 7b

    对于数字精度和格式输出控制,可以使用Number类的toFixed()、toExponential()、toPrecision()方法,例如:

    var pi = 3.1415926;
    alert(pi.toFixed(2));   // => 3.14
    alert(pi.toFixed(4));   // => 3.1416,注意:会四舍五入的哦
    alert(pi.toFixed(10));  // => 3.1415926000,注意:位数不够的话会自动补0的哦

    完。

  • 相关阅读:
    AdaBoost学习笔记
    隐马尔科夫模型(HMM)学习笔记二
    隐马尔可夫模型(HMM)学习笔记一
    k-means学习笔记
    pandas练习(四)--- 应用Apply函数
    pandas练习(三)------ 数据分组
    pandas练习(二)------ 数据过滤与排序
    pandas练习(一)------ 了解数据
    Android Studio Error:CreateProcess error=216
    玩QQ游戏,见到好几个图像是美女的QQ,就不始玩
  • 原文地址:https://www.cnblogs.com/itwhite/p/12217746.html
Copyright © 2020-2023  润新知