There seems to still be some misunderstanding, so let me give you an example:
The first link does not have a hashtag in it. It is a completely dead link. When you click it, it reloads the page (in this case the window - you will see it flash).
The second link is a dead link, but it has a hashtag in it. It is a dead link, but it does not refresh the page.
The third link takes you to a section at the bottom of the page.
I am not sure what you mean, did my example clarify this?
That is correct, and that it is why it does not refresh the page. If you don’t have the hashtag in there, the link will reload the whole page, but if you do put it in there, it will link to the top and not reload page. If you want a more specific answer, an empty string is not a URI, and according to the spec:
A URI reference [i.e. href] that does not contain a URI [an empty string is not a URI] is a reference to the current document. In other words, an empty URI reference within a document is interpreted as a reference to the start of that document, and a reference containing only a fragment identifier is a reference to the identified fragment of that document.
Here is more information if you want to read:
Basically, both are valid for dead links. Using a hashtag is preferred however as it lets you style the link, as a:link
will not work for an anchor element that does not have a URI.
Normally, you define it like this:
<a href="#about"></a>
<div id="about"></a>
And the hash links to the id section you specify.
Correct. You can leave the href blank, but putting a # is common practice. Putting the hash prevents the page from reloading and let’s you style the link with css.