1.封装typeof

  1. function myTypeof(val){
  2. var type = typeof(val);
  3. var toStr = Object.prototype.toString;
  4. var res = {
  5. '[object Array]': 'array',
  6. '[object Object]': 'object',
  7. '[object Number]': 'object number',
  8. '[object String]': 'object string',
  9. '[object Boolean]': 'object boolean'
  10. }
  11. if(val === null){
  12. return null; //先判断是否是null类型因为 null 是特殊的object型 如果是的话就先排除
  13. }else if(type === 'object'){ //判断是否是引用类型的数据
  14. var ret = toStr.call(val); //判断具体的引用类型
  15. return res[ret]; //返回对象中具体的引用类型
  16. }else{
  17. return type; //若不是引用类型的数据 则直接返回type类型数据
  18. }
  19. }
  20. console.log(myTypeof(new Number(1)));

2.数组去重

数组去重的12种方法

  1. var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
  2. Array.prototype.unique = function(){
  3. var temp = {},
  4. newArr = [];
  5. for(var i = 0;i<this.length;i++){
  6. if(!temp.hasOwnProperty(this[i])){
  7. temp[this[i]] = this[i];
  8. newArr.push(this[i]);
  9. }
  10. }
  11. return newArr;
  12. }
  13. console.log(arr.unique())

解题思路: 利用键名唯一的特性__hasOwnProperty
设置一个空对象,遍历数组 判断传入的每个数组元素是否为其属性 如果不是则空对象传入此属性
新数组加入此元素.

字符串去重

  1. var str = '1122333aaaabbbbb';
  2. String.prototype.unique = function(){
  3. var temp = {},
  4. newArr = '';
  5. for(var i=0;i<this.length;i++){
  6. if(!temp.hasOwnProperty(this[i])){
  7. temp[this[i]] = this[i];
  8. newArr+=this[i];
  9. }
  10. }
  11. return newArr;
  12. }
  13. console.log(str.unique());

解题思路: 利用键名唯一的特性__hasOwnProperty
设置一个空对象,遍历字符串 判断每个字符,是否为对象的属性值,若不是则放进新字符串

打印字符串中只出现过一次的字符组成新的字符串

  1. var str = 'truaiwritwtruibowertpwrisweqx';
  2. function test(str) {
  3. var temp = {},
  4. newStr = '';
  5. for (var i = 0; i < str.length; i++) {
  6. if (temp.hasOwnProperty(str[i])) {
  7. temp[str[i]]++;
  8. } else {
  9. temp[str[i]] = 1;
  10. }
  11. }
  12. for (var key in temp) {
  13. if (temp[key] === 1) {
  14. newStr += key;
  15. }
  16. }
  17. return newStr;
  18. }
  19. console.log(test(str));

解题思路: 利用键名唯一的特性__hasOwnProperty
1.设置一个空对象,遍历字符串 判断每个字符,是否为对象的属性值,若是则将属性的键值++,若不是将属性的键值设置为1
2.遍历所有键值为1的属性 将其放入新数组

打印字符串中第一次出现且只出现过一次的字符

  1. var str = 'truaiwritwtruibowertpwrisweqx';
  2. function test(str) {
  3. var temp = {},
  4. newStr = '';
  5. for (var i = 0; i < str.length; i++) {
  6. if (temp.hasOwnProperty(str[i])) {
  7. temp[str[i]]++;
  8. } else {
  9. temp[str[i]] = 1;
  10. }
  11. }
  12. for (var key in temp) { //遍历对象
  13. if (temp[key] === 1) {
  14. return key;
  15. }
  16. }
  17. }
  18. console.log(test(str));

解题思路: 利用键名唯一的特性__hasOwnProperty
1.设置一个空对象,遍历字符串 判断每个字符,是否为对象的属性值,若是则将属性的键值++,若不是将属性的键值设置为1
2.遍历所有键值为1的属性 遍历到的第一个输出出来

习题

1

  1. function Test(a,b,c){
  2. var d = 0;
  3. this.a = a;
  4. this.b = b;
  5. this.c = c;
  6. function e(){
  7. d++;
  8. console.log(d);
  9. }
  10. this.f = e;
  11. }
  12. // var this = {
  13. // f:function(){
  14. // }
  15. // }
  16. // AO:{
  17. // d: 0
  18. // }
  19. // this.f = function(){
  20. // d++;
  21. // console.log(d);
  22. // }
  23. // return this;
  24. var test1 =new Test();
  25. test1.f(); //1
  26. test1.f(); //2
  27. var test2 = new Test();
  28. test2.f(); //1

2

  1. function test(){
  2. console.log(typeof(arguments)); //object 因为argumemts是类数组
  3. }
  4. test();

3

  1. var test = function a(){ // 函数表达式在外部直接忽略 此处a被忽略
  2. // a(); //内部可以访问
  3. return 'a';
  4. }
  5. console.log(test.name);
  6. // a()//外部无法访问 因为被忽略
  7. console.log(typeof(a)); //undefined string 类型

4 优化改写下列函数

  1. function test(day){
  2. switch (day) {
  3. case 1:
  4. console.log('Mon');
  5. break;
  6. case 2:
  7. console.log('Tue');
  8. break;
  9. case 3:
  10. console.log('Wed');
  11. break;
  12. case 4:
  13. console.log('Thu');
  14. break;
  15. case 5:
  16. console.log('Fri');
  17. break;
  18. case 6:
  19. console.log('Sat');
  20. break;
  21. case 7:
  22. console.log('Sun');
  23. break;
  24. default:
  25. console.log('I dot know');
  26. }
  27. }
  28. test(3);
  29. //写法一
  30. function test(day){
  31. var weekday = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'];
  32. // weekday.splice(0,0,'');
  33. console.log(weekday);
  34. weekday[day-1] !== undefined ? console.log(weekday[day-1]) : console.log('I don\'t know');
  35. }
  36. test(1);
  37. //写法二 不改变数组的情况下取值下标不改 正确的获取值
  38. function test(day){
  39. var weekday = [,'Mon','Tue','Wed','Thu','Fri','Sat','Sun'];
  40. // weekday.splice(0,0,'');
  41. console.log(weekday);
  42. weekday[day] !== undefined ? console.log(weekday[day]) : console.log('I don\'t know');
  43. }
  44. test(1);
  45. //写法三
  46. function test(val) {
  47. var res = {
  48. '1': 'Mon',
  49. '2': 'Tue',
  50. '3': 'Wed',
  51. '4': 'Thu',
  52. '5': 'Fri',
  53. '6': 'Sat',
  54. '7': 'Sun'
  55. }
  56. // console.log(res[val]);
  57. return res[val] === undefined ? 'i dont konw' : res[val];
  58. }
  59. console.log(test(3));