1LSGO软件技术团队
贡献人:马燕鹏
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。
If you like the content here, the greatest helpyou can give meis forwarding, so tell your friends and encourage them to learn together.
3月14日,我在自己的一篇图文
《走出生活的怪圈:停下来是为了更好的开始!》
中,提到:“我想做一名全栈工程师啊!在移动互联网的时代,没有自己的互联网产品是多么可惜啊!我会在这里记录自己利用业余时间学习JavaScript、Html、CSS、Node.js等,成为全栈工程师的全过程”。
昨天,我在知乎上看到关于Full Stack Engineer的讨论,有一个观点“全栈工程师不是为了工作本身,而是为了方便实现自己的梦”,我非常的认可。两周过去了,我把学习笔记整理如下:
学习笔记:
C#语言入口在main函数,JavaScript语言入口在HTML的标签。
C#语言的调制环境在类似Visual Studio这样的IDE中,JavaScript语言的调试环境在Chrome这样的Browser中。
JavaScript的语句结束标示、语句块标识、注释方式、大小写方式均与C#语言一致。
C#中的int、float、double、decimal全部归入JavaScript的Number类型,运算方面按照double类型处理,运算规则一致。
JavaScript中关于Number增添了NaN、Infinity,而在C#中此种情况会抛异常。
C#与JavaScript中都提供了Number与String类型的转换函数。
C#字符与字符串区分明显,而JavaScript中都按照字符串处理。
C#与JavaScript逻辑运算符与逻辑运算基本一致,但JavaScript的逻辑运算遵循“短路原则”。
C#与JavaScript比较运算符与比较运算基本一致,在相等判断上JavaScript略微繁琐。
JavaScript可通过isNaN、isFinit来判断是否为NaN、Infinity类型。
C#与JavaScript进行数学运算的类都为Math。
C#只有引用类型可为null,而JavaScript所有类型都可为null,另外还定义了undefined类型。
C#中的数组要求元素类型相同,JavaScript中可为任意类型,虽定义不同,但按照索引的访问方式相同。
C#中无类无对象,而JavaScript中,无类可直接定义对象,但访问成员的方式相同。
C#强类型(静态语言),JavaScript弱类型(动态语言),可利用'use strict'添加var约束。
C#按照类型赋默认值,而JavaScript默认为undefined。
C#与JavaScript都支持转义字符。
C#通过String.Format 、JavaScript通过 反引号 $ 进行格式化字符串的操作。
C#与JavaScript都提供了大量操作字符串的方法,这些方法的命名还基本相同。
JavaScript赋予数组的操作可看作是C#中链表(indexof、slice、splice、sort、reverse、concat、join);栈、队列(unshift、shift、push、pop);动态数组(length)的综合体,即完全表达了线性结构。
JavaScript多维数组与Matlab中的多维数组类似,一种Cell结构。
C#对象是通过类实例化的,不可改变成员。JavaScript对象可直接创建,通过给不存在的属性赋值创建属性,delete不再需要的属性。
C#通过反射技术获取类的内部信息。JavaScript通过in、hasOwnProperty获取对象内部信息。
JavaScript与C#有相同的条件语句语法规则,但JavaScript的判断条件远比C#灵活,与false等价的类型很多。
for、while、do...while三种循环方式 C# 与JavaScript完全一样。
C# 通过反射技术遍历类中的成员,JavaScript利用 for...in 遍历对象的属性。
Map、Set是JavaScript中定义的两个集合类。Map是key-value对的集合,Set是无重复key的集合。
C#和JavaScript都利用迭代器的概念来遍历集合中的元素,C#使用foreach关键词,JavaScript使用forEach扩展方法。
JavaScript为了方便起见,也可以使用for...of来枚举集合类中的每个元素。
定义函数三要素:函数名(C#必须有、JS不必须有)、形参列表(C#实参与形参一致,JS实参个数任意)、返回值。
JavaScript把函数当作对象,除了普通方式外,可用逆名的方式定义函数,类似C#中定义的逆名delegate。
JavaScript 调用函数的方式有三种, call 和 apply 与 C# 中的 Invoke 类似。
为了解决变参问题, C# 引入 param 关键词, JavaScript 引入 arguments 、 ...rest 关键词。
JavaScript与C#一样都存在变量作用域问题。解决方案也基本一致,如寻找时都按照由“内”到“外”的顺序、为解决命名冲突都引入名字空间的概念。
JavaScript中var定义变量最低的作用域为函数级。变量在函数内定义,作用域就在函数内;在函数外定义,作用域就是全局。默认全局对象为window,也可把window看成最高层的名字空间。JavaScript用var定义的变量存在作用域提升问题,是个坑!
JavaScript为解决var作用域最低到函数级以及变量作用域提升问题,引入了新的定义变量的关键词let,这样变量作用域就与C#一致了。
C#和JavaScript标识常量都用const关键词,C#还可以使用readonly。
JavaScript通过“解构赋值”可以同时对多个变量进行赋值。数据源为数组或对象。接收方式与数据源保持一致。
通过“解构赋值”可以解决函数形参与对象属性的绑定问题,即可以直接传入对象。
JavaScript中的对象包括两个部分:属性,方法。
JavaScript的方法中隐含关键词this,与C#一样,表示该对象本身。
JavaScript中的方法既可以写在对象中(this表示对象本身),又可以写在对象外(this表示window)。在使用这种方法时需要利用“object.Method()"方式,或者Method.call()、Method.apply()方式,目的是让this有一个正确的指向。当然若方法中不涉及this,可以传入null。
通过apply可以为JavaScript提供的方法加壳。
JavaScript 中形参包含函数对象的方法,称为高阶方法。类似于 C# 函数中包含 delegate 变量。
JavaScript 针对数组提供的高阶方法,类似于 C# 中对集合的 LINQ 。
JavaScript 中 map 对集合中各元素,执行传入的函数f(x),得到新的集合。
JavaScript 中 reduce 对集合中各元素,执行传入的函数f(f(x,y),y),得到一个新的最终元素。
JavaScript 中 filter 对集合中各元素进行f(x)过滤,得到新的集合。
JavaScript 中 sort 对集合中各元素执行f(x,y)比较,直接改变原来集合。
在JavaScript中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁,与C#中闭包的含义一致。
JavaScript中的箭头函数,不就是C#中的匿名委托、Lambda表达式,LINQ这套东西吗?
JavaScript中的 this 好乱,幸亏有箭头函数保驾护航,函数嵌套函数,内层函数要写成箭头函数的形式。
JavaScript 中的generator,就是 迭代器模式的实现啊,在C#中也有 return yield; return break 这样的对应语法结构。
经过8年多的发展,LSGO软件技术团队在地理信息系统、数据统计分析、计算机视觉领域积累了丰富的研发经验,也建立了人才培养的完备体系。
欢迎对算法设计与实现感兴趣的同学加入,与我们共同成长进步。
本微信公众平台长期系统化提供有关机器学习、软件研发、教育及学习方法、数学建模的知识,并将以上知识转化为实践。拒绝知识碎片化、耐心打磨技能、解决实际问题是我们的宗旨和追求。
领取专属 10元无门槛券
私享最新 技术干货