Javascript 好用的prototype以及各种模式介绍
最初创建对象的时候基本上就是这样子的:
var people = {
name: "Nicholas",
age: 29,
job: "Software Engineer",
sayName: function() {
console.log(this.name)
}
};
最初创建对象的时候基本上就是这样子的:
var people = {
name: "Nicholas",
age: 29,
job: "Software Engineer",
sayName: function() {
console.log(this.name)
}
};
上一回我们对比了for-in与forEach(其实是辨别),这次说说和Object.keys()
的区别。
起初在javascript中见到for-in的时候,误以为for-in就是PHP中的foreach(说实在的这些东西怎么用我都快要忘记了),结果发现是我想太多了,for-in怎么用,拿书上输出window
的未免太多,看的也不确切,所以在看到面向对象之后自己写了一下。
好久没有更新了,六月份因为考试的缘故更是直接跳过了,前面浅浅的读了一下也不知道记些什么好,鉴于这个看着不错的样子就来mark一下。
indexOf()
方法,可以从一个字符串中搜索给定的子字符串,和他相反的是lastIndexOf()
,这个功能还算常见,正好码这段想到其他问题了,比如:
var stringValue = "Lorem ipsum dolor sit amet, consectetur adipisicing elit";
var positions = new Array();
var pos = stringValue.lastIndexOf("orem");
这段代码的运行结果如何呢,结果是1,而换成indexOf()
结果也是1,然后我尝试了不同的测试,似乎所谓的返回子字符串的位置是从打头的字符位置而定的(如果没找到则返回-1
)。
题目:
截获了Bobwu的检讨以后,Linkinpaoger突然想到可以用自己的加密方式来加密情书。Linkinpaoger写了一封给Anonymous的情书并加密,然后发现密文中出现了很多类似ABBCCC的字符串。经过思索,Linkinpaoger决定按以下规则压缩密文:
1.任何包含k个相同字符的子串被替换为kX,X表示该子串中的唯一字符。
2.若某个这样的子串长度为1,那么省略‘1’。
按以上规则,ABBCCC将被压缩为A2B3C。现在请你帮Linkinpaoger压缩密文。
输入:
输入的第一行为一个正整数N,表示共有N组测试数据,接下来的每一行表示一组密文,密文仅由‘A'-’Z'组成。
1≤N≤100,每组密文的长度不超过10000个字符长度。
输出:
对于每组输入数据,输出一行压缩后的密文。
其实早前的文章已经说过函数和数组和指针了,那么现在再来说一下归根结底还是又忘了的缘故,加上再给原来的多些扩展和补充,尽量达成互补的效果:C 几个程序,我们来聊聊数组,函数和指针
问题来源于今天三班一个学霸问我,他的程序没法运行,什么情况?
翻译自:How To Read C Declarations 原文
就算是非常有经验的C程序员,也对那些比简单数组/指针更复杂一些的声明感到头疼。比如说,下面这个是一个指针的数组,还是一个数组的指针?
int *a[10];
下面这货到底是什么?
int (*(*vtable)[])();
当然了,这货是一个指针,指向一个数组,这个数组的每个元素是一个指针,指向一个函数,函数的返回值类型是int :)
这篇短文希望能够教会你一个非常简单地读懂复杂声明的方法。我99%肯定我在80年代读过这篇,但是不记得具体是在什么地方读到的了。我怀疑是我自己发现这个的(尽管我总会被计算机语言结构和神秘的事物搞得很兴奋)。然而我的确记得,能够写出一个程序,将任何声明转换成英语。
题目如下:
一份计算机市场调查报告显示,市场上PC机的售价不同:6500,4990,5500,7200,6810,5700,5660,6900,5850,6250。编写程序,计算平均售价以及最大差价(最大差价=最高售价-最低售价)。
当然那题目给出的输入方式是不断空格的,那么难道因为这个我们就需要使用%d %d %d
直到10吗?实际上并不需要,直接输入就可以了,缓冲区这个概念应该还记得,当scanf()
读到空白字符(包括enter和space),剩下的并不是直接丢弃,而是存在缓冲区,而读取的时候从第一个非空白字符开始读取,所以,我们使用循环结构,一路用空格就行了,直到清空了缓冲区。
我们来看看这个程序的源码吧
#include <stdio.h>
#define NUM 10
int main(void)
{
int i;
float sales[NUM];
float sum = 0, max = 0, min = 0;
printf("Please input %d sales: \n", NUM);
for (i = 0; i < NUM; i++) {
scanf("%f", &sales[i]);
sum += sales[i];
if (i == 0) { /* min max 初始化 */
max = sales[i];
min = sales[i];
}
if (sales[i] > max)
max = sales[i];
if (sales[i] < min)
min = sales[i];
}
printf("ave = %f range = %g\n", sum / NUM, max - min);
return 0;
}
关于%g
这是一个很好的新东西,在C 转换说明符%g已有介绍
扩展阅读:C 一个程序说说scanf()判断
题目:
编写一个函数,返回一个double数组中最大的和最小的数之间的差值,并在一个简单的程序中测试这个函数。
对于题目无感,很容易,只是有一点疑惑,因为答案写的时候是
printf("The gap between max and min is: %g\n",gap( array, WIDTH));
感觉很神奇,%g
是什么?在我的笔记-说明符中并没有记录,然后翻到书上的章节里,也没有详细介绍,只是把它归类为解释成浮点型。
结果输出:
2.6
9.2
The dif between max and min is : 6.6
没有多余的0,看着很舒服。
其实这个是困惑了我好久的问题,没想到在上机课做到的题里找到了答案——我的困惑是:#define
与const
到底有什么区别。
题目:
#define N 2
#define M N+1
#define NUM 2*M+1
int main(void)
{ int i;
for(i=1;i<=NUM;i++) printf(“%d\n”,i);
}
该程序中的for循环执行的次数是( )
A) 5 B) 6 C) 7 D) 8
答案是6,跑过以后怎么都不理解,这是因为忽略了#define
的重大不同。