Skip to content

Commit 18228ca

Browse files
committed
js数据基础
1 parent 0d795a2 commit 18228ca

File tree

2 files changed

+78
-31
lines changed

2 files changed

+78
-31
lines changed
Lines changed: 70 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
layout: post
3-
title: JS基础及常见面试考点一
3+
title: JS基础一 -- 数据类型
44
date: 2018-12-27 00:00:00 +0800
55
categories: JavaScript
66
tag: js基础
@@ -13,31 +13,73 @@ tag: js基础
1313
#### <font color="#65A5EA" size="3">1. 数据类型(7种)</font> {#say-goodbyte}
1414

1515
* 6种基本类型:String、Number、Boolean、Null、Undefined、Symbol
16-
* 1种引用类型(对象):Object
17-
18-
##### <font color="#65A5EA" size="2">1.1 基本类型和对象的区别:</font> {#say-goodbyte}
19-
基本类型没有自己的属性和方法。对象有自己的属性和方法。
20-
但是,为什么有的基本类型也可以调用方法呢?比如 123.toString()
21-
因为除了 null、undefined 以外的基本类型都有与之对应的特殊的引用类型——包装类型。当代码被解释执行时,底层会将基本类型转换成引用类型,这样基本类型就可以调用相应引用类型有权访问到的方法。
22-
23-
##### <font color="#65A5EA" size="2">数据类型的判断:</font> {#say-goodbyte}
24-
typeof 用于判断除null之外的基本类型
25-
对于除了 null 之外的基本类型,可以通过 typeof 获得正确的数据类型。 (typeof null //Object)
26-
对于除了function 之外的对象,typeof 都会返回 object 。 (typeof Function//function)
27-
instanceOf 用于判断一个实例是否属于某种类型,返回boolean
28-
除了Object 和 Function 之外,instanceof 自己等于false。
29-
console.log(Object instanceof Object);//true
30-
console.log(Function instanceof Function);//true
31-
console.log(Function instanceof Object);//true
32-
console.log(Number instanceof Number);//false
33-
console.log(String instanceof String);//false
34-
Object.prototype.toString.call(xx) 用于获取XX正确的数据类型,返回[Object Type] 的字符串
35-
因为toString可以读取到数据的className
36-
为什么使用Object原型上的toString方法就可以获取类型呢?
37-
因为所有类型都是object的实例,toString方法可以读取对象的内部属性[[class]]
38-
为什么不直接使用toString呢?因为toString为Object的原型方法,而Array、function、Date等类型作为Object的实例,都重写了toString方法。
39-
40-
修改模板代码 {#change-template-code}
41-
---------------------
42-
修改`_includes/LessOrMore/comments-providers/yungentie`文件中的内容,将文件中的代码全部删除,并粘贴刚刚从云跟帖网站复制的代码。
16+
* 1种引用类型(对象):Object
17+
18+
**本地对象、内置对象和宿主对象:**
19+
ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。常见的本地对象有 String、Boolean、Number、Object、Function、Array、Date、RegExp、Error、ReferenceError等。其实,本地对象就是es中定义的引用类型。
20+
ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。即内置对象是本地对象的子集,但是内置对象不是需要手动实例化,而是在在程序开始执行时已经被实例化了。如 Global、Math。在 ECMAScript 中,所有函数必须是某个对象的方法,比如parseInt 可以直接调用,事实上 parseInt 就是 Global 对象上的方法。调用 Math 对象上的方法不需要实例化,直接调用即可, Math.ceil()。
21+
宿主对象是指由宿主环境提供的对象,对于嵌入到网页中的 js 而言,浏览器就是其宿主环境,提供 BOM、DOM、console 等宿主对象。
22+
#### <font color="#65A5EA" size="3">2. 基本类型和对象的区别</font> {#say-goodbyte}
23+
基本类型没有自己的属性和方法。对象有自己的属性和方法。
24+
**但是,为什么有的基本类型也可以调用方法呢?比如 123.length**
25+
那是因为除了 null、undefined 以外的基本类型都有与之对应的特殊的引用类型——包装类型。当代码被解释执行时,底层会将基本类型转换成引用类型,这样基本类型就可以调用与之相对应的引用类型的属性和方法。
26+
27+
#### <font color="#65A5EA" size="3">3. 数据类型判断的五种方法</font> {#say-goodbyte}
28+
**(1)typeof 返回数据类型,常用于判断除null之外的基本类型**
29+
对于除了 null 之外的基本类型,可以通过 typeof 获得正确的数据类型。 (typeof null //Object)
30+
对于除了function 之外的对象,typeof 都会返回 object 。 (typeof Function//function)
31+
**(2)instanceOf 返回boolean,用于判断一个实例是否属于某种类型,会追溯原型链**
32+
除了Object 和 Function 之外,instanceof 自己等于false:
33+
Object instanceof Object //true
34+
Function instanceof Function //true
35+
Function instanceof Object //true
36+
Number instanceof Number //false
37+
String instanceof String //false
38+
var num1 = new Number(); num1 instanceOf Number //true
39+
var num2 = '123'; num2 instanceOf Number //false
40+
**(3)Object.prototype.toString.call(xx) 用于获取XX正确的数据类型,返回[Object Type] 的字符串**
41+
因为所有类型都是 object 的实例,toString 方法可以读取对象的内部属性[[class]]
42+
为什么不直接使用 toString 呢?因为 toString 为 Object 的原型方法,而 Array、function、Date 等类型作为Object的实例,都重写了 toString 方法。
43+
**(4)constructor 是 object 对象的一个属性,用于判断 object 类型的数据**
44+
var arr = [1,2,3];
45+
arr.constructor == Array //true
46+
**(5)isArray es6提供的新方法,返回boolen,用于判断数组类型**
47+
var arr = [1,2,3];
48+
Array.isArray(arr) //true
49+
50+
#### <font color="#65A5EA" size="3">4. 数据类型转换</font> {#say-goodbyte}
51+
**在条件判断时,除了 undefined, null, false, NaN, '', 0, -0,其他所有值都转为 true,包括所有对象。**
52+
另规定,console.log(null==null && undefined==undefined && null==undefined)
53+
**对象在转换基本类型时,会优先将值转换为原始值(toPrimitive优先级最高),再转换为数字(valueOf),最后转换为字符串(toString)。**
54+
**在 + 号两侧,如果一方不是字符串或数字,则会将它转换为字符串或数字:**
55+
'1'+'-2' //'1-2' 仅仅是字符串拼接
56+
[1,2]+[1,2] // '1,21,2'
57+
<font color="red" size="2">解析:数组调用 valueof 得到基本类型的值,所以调用 toString 把数组转成字符串 </font>
58+
**在 == 号两侧,会隐式地把布尔值转换成 number:**
59+
if({}){console.log(4)} //true -- 4
60+
if({}==false){console.log(5)} //false
61+
if({}==!{}){console.log(6)} //false
62+
if({}=={}){console.log(7)} //false
63+
64+
if([ ]){console.log(1)} //true -- 1
65+
if([ ]==false){console.log(2)} //true -- 2
66+
if([ ]==[ ]){console.log('')} //false
67+
if([ ]==![ ]){console.log(3)} //true -- 3
68+
<font color="red" size="2">解析:[ ]==![ ] ----> [ ]==false -----> [ ] == 0 -----> 0 == 0 --->//true </font>
69+
熟悉常见的优先级,如!非 的优先级最高。
70+
71+
#### <font color="#65A5EA" size="3">5. 深拷贝和浅拷贝</font> {#say-goodbyte}
72+
**基本类型和引用类型的区别是:**
73+
基本数据类型存储在栈中,引用类型存储在栈中的是一个地址,这个地址指向堆中的存储的对象;
74+
基本类型是传值,引用类型是传址,引用类型存在深浅拷贝。
75+
##### <font color="#65A5EA" size="2">浅拷贝</font>
76+
(1)Object.assign()
77+
>Object.assign(target, ...sources)
78+
*//用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。返回目标对象。*
79+
80+
(2)扩展符
81+
##### <font color="#65A5EA" size="2">深拷贝</font>
82+
(1)JSON.parse(JSON.stringify(obj1))
83+
84+
(2)递归
4385

_posts/2019-05-26-认识 git 这一篇就够了.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,17 @@ tag: 助攻
2121
**git 有三个区:**
2222
工作区:本地修改的文件 以红色显示,通过 git add xx 提交到暂存区;
2323
暂存区:提交到暂存区的文件 以绿色显示,起过渡作用,避免误操作,通过 git commit -m'注释说明' 提交给历史/版本区;
24-
历史/版本区 :每次提交到版本区 都会对应唯一的一个 commit-hashId。
24+
历史/版本区 :每次提交到版本区 会生成一个唯一的 commit-hashId,更新 HEAD。
25+
**commit、branch、tag、HEAD**
26+
commit 是一个包含 author + message 的对象,每次提交保存的是所有变更内容。多个 commit 对象组成一个提交树;
27+
branch 是一种引用,指向一个确定的 commit-hashId;
28+
tag 也是一种引用;
29+
HEAD 是一个特殊的引用,表示当前的引用状态,指向当前正在操作的 branch 或 tag 。
2530

2631
**各个区之间的比较 git diff**
2732
git diff //默认是工作区和暂存区之间的比较
2833
git diff master //工作区与历史区的比较
29-
git diff --chached //暂存区与历史区的比较
34+
git diff --chached //暂存区与历史区的比较
3035

3136
##### <font color="#65A5EA" size="2">3.2. 远程仓库</font> {#say-goodbyte}
3237
* git 用来管理项目版本
@@ -129,7 +134,7 @@ git merge master //把最新的 master 分支合并到你的分支,此时查
129134
git push //提交远程分支后可以上线了
130135
git branch -d //删除分支
131136
&emsp;&emsp;一切 ok 后,最后把自己分支合并到 master 上,如果自己的分支没用了 把自己的分支删掉就 OK 了!
132-
&emsp;&emsp;其实一个规范的 git 项目管理还需要打 tag,只是实际开发中很多人省略了。那么什么是 tag 呢?tag 实质上就相当于是 commithashId ,tag 不能更改,branch 可以更改*通常是在代码测试没问题上线后,把代码合并到master的时候打一个tag。* 常见的 tag 命令:
137+
&emsp;&emsp;其实一个规范的 git 项目管理还需要打 tag,只是实际开发中很多人省略了。那么什么是 tag 呢?tag 实质上就指向某一个 commithashId 的引用,tag 不能更改,branch 可以删除、更改等*通常是在代码测试没问题上线后,把代码合并到master的时候打一个tag。* 常见的 tag 命令:
133138
* git tag -a v1.3.1 -m 'eg: 调拨申请单增加权限判断' //本地tag 并标注tag信息
134139
* git push origin v1.3.1 //将tag v1.3.1 提交到git服务器
135140
* git push origin --tags 将本地所有tag提交到git服务器

0 commit comments

Comments
 (0)