What are "#" properties? While reading the Ajax framework documentation I came across mention of the #ajax property. I know from poking through the code that there are others of these properties with hash signs in front of them. What does the hash sign signify? What are these properties all about?
This is to do with render arrays in general, it's not just specific to AJAX or the form API (although the form API uses render arrays exclusively for building up it's content).

Put simply, array keys in a render array without a # in front of the name are seen as children of the render array, and are subsequently rendered themselves (recursively). 

Those with a # in front of them are seen as meta data/variables for the render array to use as necessary, and are not themselves rendered.

The render array docs (linked to above) actually put this nice and succinctly:


  A render array is a classic Drupal structured array that provides data (probably nested) along with hints as to how it should be rendered (properties, like #type).


The # keys are the 'hints' that the above paragraph is talking about, the non-# keys are the nested data.

I'd thoroughly recommend giving that page a read, it does a good job of de-mystifying the whole render array thing, and provides code examples. 

There's also another small explanation/code example on the Theming the page docs which might be useful.

Render arrays are used all over the place in Drupal (forms, themes, general markup, etc.) so knowing a good bit about them will help a lot with future Drupal development.