文章目录
前言
说实话,JavaScript的语法看得我快吐了,感觉很混乱。所以决定现在上手一点实践。
参考资料:如何循序渐进、有效地学习JavaScript?
编码工具
首先我会把Chrome浏览器装好,在dev tools => console里直接练习熟悉基本语法,变量,数据类型,数学运算,字符串运算,条件,循环基本结构,简单函数定义和调用这些,之所以用chrome dev tools,是因为这时候我不想费劲折腾单独的编辑器,也不需要在开文件和文件夹,然后去配一些工具最终才接触到真正的JS编程,我想尽可能直接而少干扰就开始写JS,这是最重要的,我学JS,当然应该尽快写JS
操作方式,在Chrome浏览器上,按下F12,然后按照gif的操作流程开始使用工具
使用方式:
Enter运行
Shift + Enter换行
简单编码
熟悉了基本语法以后,我会在devtools => console 里编几个稍微有挑战点的小程序,比如实现fibonaci 数列这种简单的,比如打印一个99乘法表,你也可以自己给自己出几个题,或者网上随机找感兴趣的题目,别人写过没写过不是重点,重点是找点事情做,让自己写代码,别小看这些看起来无聊的程序,在你的熟练度达到可以开始第一个项目之前,这些没有的小程序是最适合练手的,因为它们不牵涉其他方面的知识(比如DOM),所以你不会受到过多干扰,只需要关注用正确的语法写出正确的程序,这个过程会让你更熟悉JS语言本身。
题目地址:
基础编程题目集
1. 本题要求实现一个函数,对给定的正整数N,打印从1到N的全部正整数。
如何定义函数?函数的声明
(1)function 命令
(2)函数表达式
(3)Function 构造函数
test1:
var n = 10
printN(n);
function printN(N){
for(i = 1; i<=N; i++){
console.log(i);
}
}
输出
VM1705:5 1
VM1705:5 2
VM1705:5 3
VM1705:5 4
VM1705:5 5
VM1705:5 6
VM1705:5 7
VM1705:5 8
VM1705:5 9
VM1705:5 10
undefined
控制台直接运行代码,会返回最后一句代码的返回值
- 什么地方用分号,什么地方不用?
语句以分号结尾,一个分号就表示一个语句结束。多个语句可以写在一行内。
表达式不需要分号结尾。一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。
1 + 3
叫做表达式(expression),指一个为了得到返回值的计算式。语句和表达式的区别在于,前者主要为了进行某种操作,一般情况下不需要返回值;后者则是为了得到返回值,一定会返回一个值。
var a = 1 + 3 ; var b = 'abc';
- 怎么让输出在一行?
var n = 10
var ans = printN(n)
function printN(N){
log = "";
for(i = 1; i<=N; i++){
log += i;
if(i == N){
console.log(log)
}
log +=","
}
}
VM2095:8 1,2,3,4,5,6,7,8,9,10
2.本题要求实现一个函数,计算阶数为n的多项式在x点的值。
-
这个多项式表达式是什么意思?∑是求和的意思,即当i=01,2,3,…,n的时候,a[i] * x^2 的和
function fib(num) {
if (num === 0) return 0;
if (num === 1) return 1;
return fib(num - 2) + fib(num - 1);
}
fib(6) // 8
- 如何获取数组的长度
只要是数组,就一定有length属性。该属性是一个动态的值,等于键名中的最大整数加上1。
var arr = [‘a’, ‘b’];
arr.length // 2
arr[1000] = ‘e’;
arr.length // 1001
test2:
var sum = 0;
n = 2;
a = [2.0, 4.0, 7, 6];
x = 3.0;
sum = f(n,a,x); //全都是全局变量。可以直接用sum。
console.log(sum)
function f(n,a,x){
if(a.length < (n+1)){
return "n太大,导致越界"
}
sum = 0;
for(i = 0; i<=n ; i++){
sum += a[i] * x**i;
}
return sum;
}
VM2875:6 77
3. 简单求和
如何输入,不会。略过
4. 求自定类型元素的平均
这个示例用来学习JavaScript的对象。会创建一个对象,自定义它的构造函数,并重写valueOf
方法
- 怎么创建对象
对象(object)简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
对象的所有键名都是字符串(ES6 又引入了 Symbol 值也可以作为键名),所以加不加引号都可以。
var obj = {
foo: 'Hello',
bar: 'World'
};
- 怎么创建对象内的方法和属性
对象就是一组“键值对”。其中“值”可以是基本数据类型,但也可以是其他的对象,或者函数
var obj = {
valueOf: function () {
return 1;
}
};
- 如何实例化对象
如何使用构造函数?这件事情有个比较重要的思维需要转变。
典型的面向对象编程语言(比如C++和Java),存在“类”(class)这个概念。所谓“类”就是对象的模板,对象就是“类”的实例。但是,在JavaScript语言的对象体系,它有一个无类型(class-free)对象系统。在这个系统中,对象直接从其他对象继承属性。JavaScript不是基于“类”的,而是基于构造函数(constructor)和原型链(prototype)
继承与原型链
JS原型链与继承别再被问倒了
JavaScript 中的构造函数
function Person(name,age,job)
{ this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){ alert(this.name); };
}
var person1 = new Person('Nike',29,'teacher');
var person2 = new Person('Arvin',20,'student');
test4:
function Obj(value)
{
this.value = value;
this.valueOf = function(){
return parseFloat(value)}
}
function avg(list, N){
sum = 0;
for(i=0;i<N;i++){
sum += list[i].valueOf()
}
return sum/N;
}
var obj1 = new Obj(35);
var obj2 = new Obj(35.70);
var list = [obj1, obj2];
console.log(avg(list,2));
//输出
35.35
下面这样会报错
var obj = {
a:1
valueOf:function(){
return 2;
}
}
这样不会
var obj = {
valueOf:function(){
return 1;
}
}
这样也不会报错
var obj = {};
obj.valueOf = function(){ return 1;}
obj.a = 2;
console.log(obj.valueOf())
//1