1 Star 1 Fork 0

橘子哥哥 / 重学前端

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

《重学前端》学习记录

那个据说是前手淘的前端开发负责人winter在极客时间上面开的课。我不认识他,在他的试读当中提到的前端发展快,各种工具插件层出不穷,而大多数前端都是自学的,没有成体系 所以就造成了很多人学不动的现象,这就是前端基础差的缘故。而这个基础不单单是指web前端(js+html+css),还包括程序员通用编程基础。 作为一个嵌入式的程序员我对这话深以为然。所以决定买下该课程。68元。真尼玛贵。是真的贵。想起罗振宇这个傻屌弄出的这些知识付费。一个商人,一个做了商人还要牌面的无耻的商人。恶心。反正只要是别人赚钱我不赚钱我都不舒服。哈哈

由于这位大哥还没有更新完全,全一共40节课。而我处于对极客时间课程的不信任,很有可能不会学完。

目录

为什么要重学前端

前面在吹牛逼,说自己的简历。确实比我这种码农牛逼很多。不过依旧是在吹牛逼。又是盛大,又是阿里巴巴,刚开始还在微软。跳过不看。

第一句有意义的话:散点自学 + 基础不牢。造成这样的原因,就是对前端的知识点没有成体系。这个其实很学习任何东西都是一样的。学习就是要总结,就是要在脑海中有自己的一个思维导图。学过的知识,毕竟不是每天都是在用,总是会忘记的。所以这个时候就需要总结,形成自己的字典,等到需要用的时候就去翻看自己脑海中的这个字典,很容易就能找到解决问题的办法。

第二个有意义的话:课程的分为的四大模块

  • javascript
  • CSS和HTML
  • 浏览器实践
  • 前端综合应用

反正第一章是没屌用,正确的废话

明确自己的知识体系

没看他的课程之前,我的知识体系是构建在《javascr高级程序设计》这本书上面的。而这本书其实和在学校中学习C语言教程目录目是一样的。

  • 什么是C语言
  • C语言的组成部分:数据接口
  • 函数
  • 实际例子。

类似的,前端的知识体系也是一样。

  • HTML(骨架)
    • 各种标签body、meta、script等到
  • CSS (外表)
    • 主要是布局方面,display的和其配套的布局方法。
  • JS (行为)
    • 数据类型、数据结构
    • 数据类型之间的转换
    • 事件
    • 函数
    • 等等

这一节课,他提出了一个我第一次见到的,单单就是JavaScript而言,它的知识体系是

  • 文法
  • 语义
  • 运行时

对于计算机语言来说,用规定的文法,去表达特定语义,最终操作运行时的一个过程。

任何JavaScript的知识点都逃脱不了这个范围之外。

细分之后:

  • 文法
    • 词法
    • 语法
  • 语义
  • 运行时
    • 类型
    • 执行过程

其他知识点:

  • 程序 = 算法 + 数据结构 (读书的时候不理解这句话,现在有点感觉了)
  • 对于运行时来说,类型 = 数据结构,执行过程 = 算法
  • 可以通过for in windows 来查看浏览器的api

这章有点意思。前端最难的不是学习语言本身,而是如何去工程化,如果更好的组织代码、打包工程,如何进行下一步的优化。尤其是团队合作方面,这个我的经验基本为零。

课程学习目录

遍历一遍前端知识架构。

该课程的正式目录:

用一定的词法和语法,表达一定语义,从而操作运行时。

HTML中标签可以分类如下

  1. 文档元信息:通常是出现在head标签中的元素,包含了描述文档自身的一些信息;
  2. 语义相关:扩展了纯文本,表达文章结构、不同语言要素的标签;
  3. 链接:提供到文档内和文档外的链接;
  4. 替换型标签:引入声音、图片、视频等外部元素替换自身的一类标签;
  5. 表单:用于填写和提交信息的一类标签;
  6. 表格:表头、表尾、单元格等表格的结构。

前四种是HTMl部分课程的重点。

CSS部分分为布局、绘制、交互类

div和span不是够用了吗

这一节课说的是语义话标签。语义话标签我这段时间一直在使用,但是也就是header、aside、footer、main,section基本就这四个,仅仅是为了结构好看一些而已。就我要处理的环境而言,其实是足够的。

语义话带来的好处:

  • 开发者能够清楚的看清楚网页的结构,便于团队的开发和维护。(这个也需要其他团队的成员对于语义话标签的有所敏感)
  • 利于SEO,这个对于官网就很重要了。但是呢,对于我这种小公司而言。官网也只是有比没有好而言。用于展示公司有了什么东西而已。

winter对于语义话的使用有一个很好的总结:用对比不用好,不用比用错好。

sectionz例子:

<body>
    <header>
        <nav>
            ……
        </nav>
    </header>
    <aside>
        <nav>
            ……
        </nav>
    </aside>
    <section>
        <h1>HTML 语义 </h1>
        <p>balah balah balah balah</p>
        <section>
            <h1> 弱语义 </h1>
            <p>balah balah</p>
        </section>
        <section>
            <h1> 结构性元素 </h1>
            <p>balah balah</p> 
        </section>
        ......
    </section>
    <section>……</section>
    <section>……</section>
    <footer>
        <address>……</address>
    </footer>
</body>

值得庆幸的是,和我用的时候基本是一样的。

总结:语义话标签如果用对了,确实对开发者更加的友好,可读性更加的强。对于自己后期要修改需求有很大的帮助。可惜的是,我用的语义化标签也就到此为止了。这些用得也还算是熟悉的。

如何运用语义类标签来呈现Wiki网页

这位大哥用wiki的网页来进行语义话标签的使用说明。这样的方式其实是很好的。就是我看不下去了。因为这些语义话标签或许见过,但是基本从来是没有用过的。如下表:

服气。我觉得如果真的在项目中使用这些语义话标签的话,只会加重我前期的心理负担。而且觉得很多地方也并不实用。或许使用这些语义话标签只会会好很多,是不是由于我不想走出自己的舒适区呢?哈哈

在富文本这类场景时,我们应该尽量地语义话;写软件界面时,保持整体上的结构化即可。这位是一个网友说的,和我想的不谋而合。

有意思的知识点:

  • 对于这种横线,之前我一直使用的都是hr完事,如果觉得hr的颜色有点深,就改hr的样式。hr表示故事走向的转变或者话题的转变,所以我们绝大多是时候用css的border来把它作为纯视觉效果来实现是最好的。

**总结:**结合自己而言,对于这些细分的语义话标签,有了解的必要,没有必须融入到工作项目中的必要。

JavaScript类型:关于类型,有哪些你不知道的细节?

winter通过如下几点进行了解说:

  • 为什么有的编程规范要求用void 0 代替undefined?
  • 字符串有最大长度吗?
  • 0。1 + 0.2 == 0.3?为什么javascript里面会报错
  • ES6新加入的symbol是个什么东西?
  • 为什么要给对象添加的方法能用基本类型上?

运行时类型是代码实际执行过程中我们用到的类型。所有的类型数据都会属于7个类型之一。从变量、参数、返回值到表达式中间结果,任何javascript代码运行过程中产生的数据,都具有运行时类型。

类型

1. undefined 2. Null 3. Boolean 4. String 5. Number 6. Symbol 7. Object

undefined

这个很有意思,undefined这个类型不是关键字。就是说可以var undefined = '';但是你打印出来的依旧是undefined.说这个设计是js最失败的设计之一。

用他的说法来说,undefined的类型只有一个值就是undefined,语义是未未定义。

Null

Null类型也只有一个值,就是null,它的语义表示空值。可以常用来占位.

var xxx = null;

Boolean

Boolean类型有两个值,true和false,且都是关键字。

String

没看懂其实。字符数是啥?UTF16编码又是啥?charAt、charcodeAt、length等方法针对的都是UTF16编码。啥玩意?我这个计算机科学与技术的本科知识都对给老师来么?

值得注意的:字符串的值是不可以改变的,和数组是不一样的

var text = '我要回家过年';
text[1];        //要
text[1] = 美女;    //美女
console.log(text[1])   //要

就是说给字符串赋值会临时创建一个值,随后被销毁。

Number

值得一提就是0.1+0.2 不等于0.3的问题。是由于浮点数的精度造成的。这个在书里面说得很清楚了,没啥好记的。

Symbol

    var o = new Object

    o[Symbol.iterator] = function() {
        var v = 0
        return {
            next: function() {
                return { value: v++, done: v > 10 }
            }
        }        
    };

    for(var v of o) 
        console.log(v); // 0 1 2 3 ... 9

确实基础有点差,不知道这个玩意的使用场景是什么东西。书中说的是表示独一无二的值。

Object

每天都用的东西。他还能说出花来?果然没成花,68元好像不值啊。

和犀牛书说的一样,对象定义是“属性的集合”。属性分为数据属性和访问器属性,二者都是key-value结果。key可以是字符串或者symbol类型。

对象的数据属性

var person = {
    name:'wyc',
    age:25
}
console.log(Object.getOwnPropertyDescript(person,'name'));

执行结果:

  • configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为true

  • enumerable:表示能否通过for-in循环返回属性

  • writable:表示能否修改属性的值

  • value:包含该属性的数据值。默认为undefined

对象的访问器属性

  1. 访问器属性:这个属性不包含数据值,包含的是一对get和set方法,在读写访问器属性时,就是通过这两个方法来进行操作处理的。

  2. 访问器属性包含的四个特性:

  • configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为false

  • enumerable:表示能否通过for-in循环返回属性,默认为false

  • Get:在读取属性时调用的函数,默认值为undefined

  • Set:在写入属性时调用的函数,默认值为undefined

这里要注意下,访问器属性不能直接定义,要通过Object.defineProperty()这个方法来定义。

var person = {
    _age:18
}

类型转换

面向对象还是基于对象?

先上结论,javascript是面向对象的语言。之前看《高级程序设计》的时候,还有犀牛书的时候,以及在工作中,脑海中觉得JavaScript不是面向对象的语言,而是基于对象的。至于为什么,从来没有深入了解过。这节课,winter这个大哥就说的很清楚了。

面对对象

自然语言中,尤其是中国的自然语言中,对象指的是晚上给我一进一出的,胸前两团肉,下面和我长得不一样的一个生物。winter说Object(对象)在英文中,是一切事物的总称,和面向对象编程的抽象思维有互通之处。

要了解对象,就要了解一个叫类的玩意。类就是一些属性的集合。有四条腿,一个尾巴。这个可以是一条哈皮狗,也可以是一条哈士奇。而对象指的就是名叫汤圆的那条狗。

java、c++、pyhone等的面对对象是要基于对象的类的,而js是基于对象的原型来的。所以说js也是面向对象编程的没毛病。

所以对于对象的定义就有了如下三点:

  • 对象具有唯一标示性:即使完全相同的两个对象,也并非同一个对象
  • 对象有状态:对象具有状态,同一对象可能处于不同状态之下。
  • 对象具有行为:即对象的状态,可能因为它的行为产生变迁。
var a = { b : 1};
var c = { b : 1};
a == c          //false

修改对象的数据属性的默认值。我通常之用value就够了

    var o = { a: 1 };
    Object.defineProperty(o, "b", 
    {
        value: 2, 
        writable: false, 
        enumerable: false, 
        configurable: true
    });
    //a 和 b 都是数据属性,但特征值变化了
    Object.getOwnPropertyDescriptor(o,"a"); // {value: 1, writable: true, enumerable: true, configurable: true}
    Object.getOwnPropertyDescriptor(o,"b"); // {value: 2, writable: false, enumerable: false, configurable: true}
    o.b = 3;
    console.log(o.b); // 2

vue的双向绑定的原理就是利用javascript对象的访问属性中set和get的回调函数实现的。

我们真的需要模拟类吗?

恕我直言,这章我还没有看懂。。。你说死不死。

空文件

简介

那个据说是前手淘前端的负责人在极客时间开的一门课。68元。真的很贵了。这个仓库就是保存我看他东西的一些学习记录。 展开 收起
JavaScript
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
JavaScript
1
https://gitee.com/RainWu/relearning_frontend.git
git@gitee.com:RainWu/relearning_frontend.git
RainWu
relearning_frontend
重学前端
master

搜索帮助