前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js 数据类型笔记

js 数据类型笔记

作者头像
bamboo
发布2019-01-29 16:11:51
1.9K0
发布2019-01-29 16:11:51
举报

这篇文章主要是对阮一峰老师javascript教程中数据类型和运算的笔记,方便记忆。 有需要的朋友建议直接观看阮一峰老师javascript教程,写得更详细

一:数据类型概述

1、简介6种数据

1.1数值(number):整数和小数 1.2字符串(string):文本 1.3布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假) 1.4undefined:表示“未定义”或不存在 1.5null:表示空值, 1.6对象(object):各种值组成的集合,分成三个子类型。

  • 狭义的对象(object)
  • 数组(array)
  • 函数(function)

2、typeof 运算符

这个运算符测试一个值到底是什么数据类型 重点就是

代码语言:javascript
复制
typeof null // "object"
typeof undefined // "undefined"

二、null, undefined 和布尔值

1、null, undefined转数字化

null 转为数字是 0 undefined 转为数字是 NAN

2、null, undefined的使用场景

null表示空值。 undefined表示“未定义”,场景有4个

  • 2.1变量声明了,但没有赋值
代码语言:javascript
复制
    var i;
    i // undefined
  • 2.2调用函数时,应该提供的参数没有提供,该参数等于 undefined
代码语言:javascript
复制
function f(x) {
  return x;
}
f() // undefined
  • 2.3对象没有赋值的属性
代码语言:javascript
复制
var  o = new Object();
o.p // undefined
  • 2.4函数没有返回值时,默认返回 undefined
代码语言:javascript
复制
function f() {}
f() // undefined

3、布尔值

3.1哪些运算符会产出布尔值

  • 前置逻辑运算符: ! (Not)
  • 相等运算符:===,!==,==,!=
  • 比较运算符:>,>=,<,<=

3.2其他数据类型转换成布尔值 转换规则是除了下面六个值被转为false,其他值都视为true。

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

3.3转换成布尔值的应用环境 大部分是用于判断程序流程,如下面把if()里面判断成布尔值

代码语言:javascript
复制
if ('') {
  console.log('true');
}

三、数值(该部分内容较多,我只是简要摘取一部分)

数值组成方式 JavaScript 内部,所有数字都是以64位浮点数形式储存。 第1位:符号位,0表示正数,1表示负数 第2位到第12位(共11位):指数部分 第13位到第64位(共52位):小数部分(即有效数字)

四、字符串

1、定义: 字符串就是零个或多个排在一起,放在单引号或双引号之中的字符

2、字符串使用的异常场景

  • 2.1 单引号字符串的内部,可以使用双引号,不能直接使用单引号。双引号字符串的内部,可以使用单引号,不能直接使用双引号
代码语言:javascript
复制
'key = "value"'
  • 2.2 在单引号字符串的内部,使用单引号,就必须在内部的单引号前面加上反斜杠,用来转义
代码语言:javascript
复制
'Did she say \'Hello\'?'
// "Did she say 'Hello'?"
  • 2.3字符串默认只能写在一行内,分成多行将会报错
代码语言:javascript
复制
'a
b
c'
// SyntaxError: Unexpected token ILLEGAL
  • 2.4如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠

注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错。

代码语言:javascript
复制
var longString = 'Long \
long \
long \
string';

longString
// "Long long long string"
  • 2.5可以用+连接多个单行字符串,将长字符串拆成多行书写
代码语言:javascript
复制
var longString = 'Long '
  + 'long '
  + 'long '
  + 'string';

2.6 es6新增写法 使用`包裹字符串,就可以实现换行。**这个符号是键盘esc下面那个键**

clipboard.png
clipboard.png

3、字符串的使用

3.1获取字符串的长度

代码语言:javascript
复制
 var str = "hello";
    console.log( str.length );

3.2通过下标获取到字符串某个字符的值

代码语言:javascript
复制
 console.log( str[0] );  //h
 console.log( str[str.length - 1]  ); // 0

3.3通过charaAt获取到字符串某个字符的值

代码语言:javascript
复制
var str = "hello";
console.log( str.charAt(0) ); // h
console.log( str.charCodeAt(0) ); //输出对应字符的ASCII码

3.4字符串截取 注意截取后,原来的字符串不变

代码语言:javascript
复制
 var str = "hello world";
 var sub1 = str.substr(1, 3); // 第一个是开始位置, 第二个是长度  
 var sub2 = str.substring(1, 3); // 第一个是开始位置,第二个是结束位置,str[结束位置]不会被截取进去

3.5用search查找字符串内是否有对应的内容 原来的字符串不变

代码语言:javascript
复制
var str = "hello my world";
var s1 = str.search('my');   //6(开始位置) 找不到为-1

3.6 用replace替换字符串的值 原来的字符串不变

代码语言:javascript
复制
 var s2 = str.replace('my', 'your') //前面是被替换内容,后面是替换内容

3.7改变字符串大小写 字符串操作不会修改原来的字符串

代码语言:javascript
复制
var str = "Hello";
    str.toUpperCase(); //HELLO
    str.toLowerCase(); //hello

3.8字符串拼接

  • 两个不同字符串相+
代码语言:javascript
复制
var str1='hello'
var str2='world'
str1+str2  //"helloworld"
  • 字符串名和字符串相加
代码语言:javascript
复制
var color ='red'

var str='衣服的颜色是'+color //衣服的颜色是red
  • 字符串模板
代码语言:javascript
复制
var name = '饥人谷'
var website = 'jirengu.com'

var str = `你好, 这里是${name},${website},开启你的前端之路`
//"你好, 这里是饥人谷,jirengu.com,开启你的前端之路"

五、对象

1、定义:

对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

2、对象的组成

代码语言:javascript
复制
var obj = {
  foo: 'Hello',
  bar: 'World'
};
  • 该对象内部包含两个键值对
  • foo是“键名”(成员的名称),字符串Hello是“键值”(成员的值)
  • 两个键值对之间用逗号分隔

3、键名的定义规则

对象的每一个键名又称为“属性”(property)

  • 3.1对象的所有键名都是字符串,可以不用打引号
  • 3.2键名如果是数值,会转成字符串
代码语言:javascript
复制
var obj = {
  1: 'a',
  3.2: 'b',
  1e2: true,
  1e-2: true,
  .234: true,
  0xFF: true
};
  • 3.3键名的命名满足标识名的条件,不然就要打上引号
代码语言:javascript
复制
var obj = {
  1p: 'Hello World'
};

// 不报错
var obj = {
  '1p': 'Hello World',
  'h w': 'Hello World',
  'p+q': 'Hello World'
};

4、键值的使用场景

对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。

  • 4.1属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。
代码语言:javascript
复制
var obj = {
  p: function (x) {
    return 2 * x;
  }
};

obj.p(1) // 2
  • 4.2属性的值还是一个对象,就形成了链式引用。
代码语言:javascript
复制
var o1 = {};
var o2 = { bar: 'hello' };

o1.foo = o2;
o1.foo.bar // "hello"

5、对象获取键值的方式(只有两种)

  • 5.1通过对象名.属性名来获取属性的值
代码语言:javascript
复制
var o1 = {};
var o2 = { bar: 'hello' };

o1.foo = o2;
**o1.foo.bar** // "hello" 
  • 5.2通过对象名['属性名']来获取属性的值,注意中括号里面是字符串,所以一定要加引号
代码语言:javascript
复制
o1['foo']
ol[foo]就是错误的,因为浏览器解析时会认为foo是一个变量,找不到这个变量就会报错

6、对象的引用

  • 如果把一个原始类型(number 字符串 等)的值赋值给变量。那变量这时都是值的拷贝。 如果把对象赋值给变量,我们只是将对象的存储地址指向了变量。
  • 如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,修改其中一个变量,会影响到其他所有变量。
代码语言:javascript
复制
var o1 = {};
var o2 = o1;

o1.a = 1;
o2.a // 1

o2.b = 2;
o1.b // 2

7、表达式还是语句?

JavaScript规定,如果行首是大括号,一律解释为语句(即代码块)。 如果要解释为表达式(即对象),必须在大括号前加上圆括号。

代码语言:javascript
复制
eval('{foo: 123}') // 123   这是一个语句,表示一个代码区块,里面有一个标签foo,指向表达式123。
eval('({foo: 123})') // {foo: 123}  这是一个表达式,表示一个包含foo属性的对象
代码语言:javascript
复制
{foo:123}.foo 是错误的
({foo:123}).foo //输出的是123

8、对象的使用方法

8.1 检查变量是否声明 原理:在浏览器环境,所有全局变量都是window对象的属性。 window.a的含义就是读取window对象的a属性,如果该属性不存在,就返回undefined,并不会报错。

代码语言:javascript
复制
if ('a' in window) {
  // 变量 a 声明过
} else {
  // 变量 a 未声明
}

8.2属性的赋值 和读取值一样,有两种方法

代码语言:javascript
复制
o.p = 'abc';
o['p'] = 'abc';

8.3用Object.keys查看所有属性

代码语言:javascript
复制
var o = {
  key1: 1,
  key2: 2
};

Object.keys(o);
// ['key1', 'key2']

8.4 delete删除对象的属性

代码语言:javascript
复制
var o = {p: 1};
Object.keys(o) // ["p"]

delete o.p // true
o.p // undefined

注意:delete命令不能删除var命令声明的变量,只能用来删除属性。因为var声明的全局变量都是顶层对象的属性,而且默认不得删除。

代码语言:javascript
复制
var p = 1;
delete p // false
delete window.p // false

8.5用for...in循环用来遍历对象的全部属性 var obj = {a: 1, b: 2, c: 3};

for (var i in obj) { console.log(o[i]); } // 1 // 2 // 3 i就是定义了一个变量,里面放的就是对象的属性

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:数据类型概述
    • 1、简介6种数据
      • 2、typeof 运算符
      • 二、null, undefined 和布尔值
        • 1、null, undefined转数字化
        • 2、null, undefined的使用场景
          • 3、布尔值
            • 三、数值(该部分内容较多,我只是简要摘取一部分)
              • 四、字符串
              • 五、对象
                • 1、定义:
                  • 2、对象的组成
                    • 3、键名的定义规则
                      • 4、键值的使用场景
                        • 5、对象获取键值的方式(只有两种)
                          • 6、对象的引用
                            • 7、表达式还是语句?
                              • 8、对象的使用方法
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档